为什么在点击隐藏之后再点击显示会先出现后立刻自动消失呢

为什么在点击隐藏之后再点击显示会先出现后立刻自动消失呢

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

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

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

    <title>Document</title>

    <link rel="stylesheet" href="css/base.css">

    <style>

        .show{

            height:30px;

            width:100px;

        }

        .hide{

            height:30px;

            width:100px;

        }

        .content{

            display: none;

            height:200px;

            width:200px;

            background-color: cornflowerblue;

        }

        #transition{

            -o-transition: all 1s;

            -moz-transition: all 1s;

            -webkit-transition: all 1s;

            -ms-transition: all 1s;

            transition: all 1s;

        }

        .fadeOut{

            visibility: hidden;

            opacity:0;

        }

    </style>

</head>

<body>

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

    <div class="content fadeOut" id="transition"></div>

    <div>111</div>

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

    <script>

        var $show = $('.show'),

            $hide = $('.hide'),

            $content = $('.content');

        var silent = {

            show:function($elem){

                $elem.triggerHandler('show');

                $elem.show();

                $elem.trigger('shown');

            },

            hide:function($elem){

                $elem.hide();

            },

        }

        var fade = {

            show:function($elem){

                $elem.show();

                setTimeout(function(){

                    $elem.removeClass('fadeOut');

                },20);

            },

            hide:function($elem){

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

                    $elem.hide();

                })

                $elem.addClass('fadeOut');

            }

        }


        $show.on('click',function(){

            fade.show($content);

        })


        $hide.on('click',function(){

            fade.hide($content);

        })


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

        //     silent.show($content);

        // })

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

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

        //         $content.html('<p>111<p>');

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

        //         setTimeout(function(){

        //             $content.html($content.html()+'<p>222<p>');

        //         },1000);

        //     }

        // });

        // $hide.on('click',function(){

        //     silent.hide($content);

        // });

    </script>

</body>

</html>


正在回答

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

1回答

同学你好,这是因为当第一次点击隐藏按钮,执行hide方法中的代码后,会给元素绑定一个transitionend事件,即过渡结束后就好触发此事件。当点击显示时,显示的过渡效果结束后,就会触发transitionend事件,执行 $elem.hide();隐藏。如下把事件注释就可以了:

http://img1.sycdn.imooc.com//climg/5e1d27a4097c49af05850216.jpg

或者在显示的事件中,重新为元素绑定一个transitionend事件,事件要执行的内容为显示:

http://img1.sycdn.imooc.com//climg/5e1d28c109fd602905300241.jpg

如果我的回答帮助到了你,欢迎采纳,祝学习愉快~

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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