为什么会出现如下问题
来源:2-7 css3实现其他显示隐藏效果
Kunagisa_
2020-01-28 18:56:49
以下是html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <link rel="stylesheet" type="text/css" href="css/base.css"/> <style type="text/css"> body{ width: 400px; margin: 0 auto; } .btn{ width: 50%; height: 30px; } #box{ display: none; width: 100%; height: 200px; background-color: red; overflow: hidden; } .transition{ -o-transition: all .5s; -ms-transition: all .5s; -moz-transition: all .5s; -webkit-transition: all .5s; transition: all .5s; } .fadeOut{ visibility: hidden !important; opacity: 0 !important; } .slideUpDownCollapse{ height: 0 !important; padding-top: 0 !important; padding-bottom: 0 !important; } .slideLeftRightCollapse{ width: 0 !important; padding-left: 0 !important; padding-right: 0 !important; } </style> </head> <body> <button id="btn-show" class="btn">显示</button><button id="btn-hide" class="btn">隐藏</button> <div id="box"></div> <script src="js/jQuery-3.4.1.js"></script> <script src="js/transition.js"></script> <script src="js/showHide.js"></script> <script type="text/javascript"> // console.log(window.mt.transition.end); // console.log(window.mt.transition.isSupport); var $box = $('#box'); css3.fade.init($box); $('#btn-show').on('click',function(){ css3.fade.show($box); }); $('#btn-hide').on('click',function(){ css3.fade.hide($box); }); // 小A $box.on('show shown hide hidden',function(e){ console.log(e.type); }) </script> </body> </html>
以下是js
(function($){ var transition = window.mt.transition; function init($elem,hiddenCallback){ if($elem.is(':hidden')){ $elem.data('status','hidden'); if(typeof hiddenCallback === 'function') hiddenCallback(); }else{ $elem.data('status','shown'); } } function show($elem,callback){ if($elem.data('status')==='show')return; if($elem.data('status')==='shown')return; $elem.data('status','show').trigger('show'); callback(); } function hide($elem,callback){ if($elem.data('status')==='hide')return; if($elem.data('status')==='hidden')return; $elem.data('status','hide').trigger('hide'); callback(); } var silent ={ init:init, show:function($elem){ show($elem,function(){ $elem.show(); $elem.data('status','shown').trigger('shown'); }) }, hide:function($elem){ hide($elem,function(){ $elem.hide(); $elem.data('status','hidden').trigger('hidden'); }) } }; var css3 = { fade:{ init:function($elem){ css3._init($elem,'fadeOut'); }, show:function($elem){ css3._show($elem,'fadeOut'); }, hide:function($elem){ css3._hide($elem,'fadeOut'); } }, slideUpDown:{ init:function($elem){ $elem.height($elem.height()); css3._init($elem,'slideUpDownCollapse'); }, show:function($elem){ css3._show($elem,'slideUpDownCollapse'); }, hide:function($elem){ css3._hide($elem,'slideUpDownCollapse'); } }, slideLeftRight:{ init: function($elem) { $elem.width($elem.width()); css3._init($elem, 'slideLeftRightCollapse'); }, show: function($elem) { css3._show($elem, 'slideLeftRightCollapse'); }, hide: function($elem) { css3._hide($elem, 'slideLeftRightCollapse'); } }, fadeSlideUpDown:{ init: function($elem) { $elem.height($elem.height()); css3._init($elem, 'fadeOut slideUpDownCollapse'); }, show: function($elem) { css3._show($elem, 'fadeOut slideUpDownCollapse'); }, hide: function($elem) { css3._hide($elem, 'fadeOut slideUpDownCollapse'); } }, fadeSlideLeftRight:{ init: function($elem) { $elem.width($elem.width()); css3._init($elem, 'fadeOut slideLeftRightCollapse'); }, show: function($elem) { css3._show($elem, 'fadeOut slideLeftRightCollapse'); }, hide: function($elem) { css3._hide($elem, 'fadeOut slideLeftRightCollapse'); } } }; css3._init = funtion($elem,className){ $elem.addClass('transition'); init($elem,function(){ $elem.addClass(className); }); }; css3._show = function($elem,className){ show($elem,function(){ $elem.off(transition.end).one(transition.end,function(){ $elem.data('status','shown').trigger('shown'); }) $elem.show(); setTimeout(function(){ $elem.removeClass(className); },20) }) }; css3._hide = function($elem,className){ hide($elem,function(){ $elem.off(transition.end).one(transition.end,function(){ $elem.hide(); $elem.data('status','hidden').trigger('hidden'); }) $elem.addClass(className); }); } }; var js = { fade:{ show:function(){ }, hide:function(){ } }, slideUpDown:{ show:function(){ }, hide:function(){ } }, slideLeftRight:{ show:function(){ }, hide:function(){ } }, fadeSlideUpDown:{ show:function(){ }, hide:function(){ } }, fadeSlideLeftRight:{ show:function(){ }, hide:function(){ } } } })(jQuery);
控制台会出现如下错误
3回答
同学你好,测试同学提供的代码,js文件中还多出了一个花括号,如下:
另外,从报错信息上可以看到css3没有定义,原因是在自执行函数里面声明的是局部变量,外部获取不到。所以会报错。
如果我的回答帮助到了你,欢迎采纳,祝学习愉快~
Kunagisa_
提问者
2020-01-29
第二条错误经由去掉js中最外层的包裹得以解决,感觉是作用域的问题但还不是很清楚,希望老师可以讲解一下
Kunagisa_
提问者
2020-01-29
第一条错误的原因已经发现了,是_init的function拼写错误。说css3未定义的错误是因为什么呢
相似问题