为什么没有把show shown控制台输出而是输出了hide 才输出shown是不是动画才结束那show的动画怎么没有执行呢

为什么没有把show shown控制台输出而是输出了hide 才输出shown是不是动画才结束那show的动画怎么没有执行呢

<!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>

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

<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="transition"></div>

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

<script>

    var silent={

        init:function($elem){

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

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

            }else{

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

            }

        },

        show:function($elem ,showcallback,showncallback){

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


            if($elem.data('status')==='show')return;

            if($elem.data('status')==='shown')return;

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

 $elem.show()

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

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

        },

        hide:function($elem){

            if($elem.data('status')==='hide')return;

            if($elem.data('status')==='hidden')return;

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

 $elem.hide();

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

        }

    };

    var css3={

     

        fade:{

            init:function($elem){

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

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

            }else{

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

            }

        },    

 show:function($elem){

    if($elem.data('status')==='show')return;

            if($elem.data('status')==='shown')return;


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

   

     $elem.one('transitionend',function(){

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

     

            })

       

     $elem.show();

 setTimeout(function(){

     $elem.removeClass('fadeout');

 },20);

 


        },

        hide:function($elem){

            if($elem.data('status')==='hide')return;

            if($elem.data('status')==='hidden')return;

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

       

            $elem.one('transitionend',function(){

                $elem.hide();

                $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>


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

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

1回答
好帮手慕然然 2022-01-16 11:38:08

同学你好,如果点击显示按钮之后,快速点击隐藏按钮,此时显示按钮事件中的transitionend过渡还没有执行完毕,就会执行隐藏按钮中的代码,所以会先显示 show 和 hide,而 shown 和 hidden则需要等待过渡结束后才会显示(过渡是需要时间的),具体执行过程如下:

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

祝学习愉快!

  • 提问者 慕仰8079247 #1

    还是不行触发不了

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

    同学你好,老师测试代码是没问题的。建议打开控制台,查看一下是否有报错,然后截个图发过来老师看一下。

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

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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