为什么这个transition没有执行,点了隐藏盒子还在还有showhide控制台都没有输出了

为什么这个transition没有执行,点了隐藏盒子还在还有showhide控制台都没有输出了

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

   

<style>

    body{

        width:400px;

        margin:0 auto;

    }

    .btn{

        width:50%;

        height:30px;


    }

    #box{

   

    display: none;

        margin-top: -20px;

        width:100%;

        height:200px;

  background:red;

    }

    .transition{

        -o-transition:all 0.5s;

        -ms-transition:all 0.5s;

        -moz-transition:all 0.5s;

        -webkit-transition:all 0.5s;

        transition:all 0.5s;

    }

    .fadeout{

        visibility: hidden;

        opacity: 1;

    }

</style>


</head>

<body>

 

    <button id="btn-show" class="btn">显示</button><button id="btn-hide" class="btn">隐藏</button>

    <div id="box" class=""></div>

    <button  class="btn">显示1</button>

    <script src="js/jquery-1.7.1.js"></script>

    <script src="js/transition.js"></script>

<script>

 

 

    console.log(window.mt.transition.isSupport)

    var transition=window.mt.transition;

    //console.log(window.mt.transition.end);

 

    function init($elem,hiddencallback){

   

             

            if($elem.is(':hidden')){

         $elem.data('status','hidden')

         if(typeof hiddencallback==='function')hiddencallback();

         $elem.addClass('fadeout')

            }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 ){

            // if(typeof showcallback==='function')showcallback();

 show($elem,function(){

     $elem.show();

     $elem.data('status','shown').trigger('shown');

     callback;

 })

         

 

        //   if(typeof showncallback==='function')showncallback();

        },

        hide:function($elem){

           hide($elem,function(){

            $elem.hide();

 $elem.data('status','hidden').trigger('hidden');

       

           })

        }

    };

    var css3={

     

        fade:{

            init:function($elem){

                $elem.addClass('transition');

                init($elem,function(){

                    $elem.addClass('fadeout')

                });

            },

 show:function($elem){

   

    show($elem,function(){

        $elem.off('transition.end').one('transition.end',function(){

        $elem.data('status','shown').trigger('shown');

     

            })

       

     $elem.show();

 setTimeout(function(){

     $elem.removeClass('fadeout');

 },20);

    })

 

 


        },

        hide:function($elem){

       

        hide($elem,function(){

            $elem.off('transition.end').one('transition.end',function(){

                $elem.hide();

                alert(1)

                $elem.data('status','hidden').trigger('hidden');

            });

       

            $elem.addClass('fadeout');

       

     

        });

    }

        },

        slideupdown:{

            show:function(){


},

hide:function(){

   

}

        },

        slideleftright:{

            show:function(){


},

hide:function(){

   

}

        },

        fadeslideupdown:{

            show:function(){


},

hide:function(){

   

}

        },fadeslideleftright:{

            show:function(){


},

hide:function(){

   

}

        }


    };

    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(){

   

}

}  

    };

    var $box=$('#box');

    css3.fade.init($box);

    $('#btn-hide').on('click',function(){

        css3.fade.hide($box);

    });

    $('#btn-show').on('click',function(){

        css3.fade.show($box)

       

   });

//    silent.init($box);

//     $('#btn-show').on('click',function(){

//         css3.fade.show($box)

       

//     });

    // $box.on('show shown hide hidden',function(e){

    //   console.log(e.type)

    // })

    // $box.on('show shown',function(e){

    //    if(e.type==='show'){

    //     $box.css('background','yellow')  

    //    }else if(e.type==='shown'){

    //     setTimeout(function(){

    //             $box.css('background','')

    //         },1000)  

    //    }

    // })

    $box.on('show shown hide hidden',function(e){

      console.log(e.type)

    })

</script>

</body>

</html>

trasition.js

(function(){

    var transitionendeventname={

    transition:'transitionend',

    MozTransition:'transitionend',

    WebkitTransition:'WebkitTransitionEnd',

    OTransition:'OTransitionEnd otransitionend'

};

var transitionEnd="",

isSupport=false;

for(var name in transitionendeventname){

    if(document.body.style[name]==undefined){

        transitionEnd= transitionendeventname[name];

        isSupport=true;

        break;

    }

}

window.mt=window.mt||{};

window.mt.transition={

    end:transitionEnd,

    isSupport:isSupport

};


})();


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕然然 2022-01-16 13:51:55

同学你好,是因为将transition.end放在了引号中,此时变为了字符串‘transition.end’,而不再是获取transition中的end属性值(即transitionend),所以不能放在引号中,如图

https://img1.sycdn.imooc.com//climg/61e3b24a09c5373509850913.jpg

祝学习愉快!

  • 提问者 慕仰8079247 #1


    还是不行触发不了就连console.log(window.mt.transition.issupter)都没有输出为什么


    2022-01-16 14:33:31
  • 好帮手慕然然 回复 提问者 慕仰8079247 #2

    同学你好,建议打开控制台查看一下代码是否报错。老师这边测试是没有报错的,猜测可能是transition.js文件引入路径不正确,同学可以检查一下路径中的transition拼写是否正确。

    2022-01-16 14:38:30
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师