老师为什么点击显示之后会自动触发隐藏

老师为什么点击显示之后会自动触发隐藏



# 粘贴全部相关代码,切记添加代码注释(请勿截图)

<!DOCTYPE html>

<html lang="en">


<head>

    <meta charset="UTF-8">

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

    <title>Document</title>

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

    <style>

        body {

            width400px;

            margin0 auto;

        }


        .btn {

            width50%;

            height30px;

            floatleft;

        }


        #box {

            displaynone;

            /* visibility: hidden;

            opacity: 1; */

            width100%;

            height200px;

            background-colorred;

            floatleft;

        }


        .transition {

            -o-transitionall 0.5s;

            -ms-transitionall 0.5s;

            -moz-transitionall 0.5s;

            -webkit-transitionall 0.5s;

            transitionall 0.5s;

        }

        .fadeOut{

            visibilityhidden;

            opacity0;

        }

    </style>

</head>


<body>

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

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

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

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

    <script src='../js/showHide.js'></script>

    <script>

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


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

        //     silent.show($box, function () {

        //         $box.html('<p>显示</p>');

        //     }, function () {

        //         setTimeout(function () {

        //             $box.html($box.html() + '<p>ok</p>');

        //         }, 1000)

        //     });

        // })

        // silent.init($box);

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

            css3.fade.show($box);

        })

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

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

        //         $box.html('<p>显示</p>');

        //     }

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

        //         setTimeout(function () {

        //             $box.html($box.html() + '<p>ok</p>');

        //         }, 1000)

        //     }

        // })

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

            console.log(e.type);

        })

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

            css3.fade.hide($box);

        })        

    </script>

</body>


</html>


var silent = {

    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.show();

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


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

        // $elem.show();

        // 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: {

        show: function ($elem) { 

            $elem.show();

            setTimeout(function (param) {  

                $elem.removeClass('fadeOut');

            },20


        },

        hide: function ($elem) { 

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

                $elem.hide();

            })

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

    }

};



正在回答

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

2回答

同学你好,同学的疑问是点击隐藏按钮之后,再点击显示按钮,元素显示了几秒钟又隐藏了吗?如果是的话,那么解答如下:

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

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

老师在下节视频中会讲解另一种解决方法,同学可以继续往下学习~祝学习愉快~

  • 慕粉4184331 提问者 #1

    可是老师的代码也是这样啊,为什么老师没有问题?

    2020-12-03 19:01:53
好帮手慕言 2020-12-04 09:42:25

同学你好,老师的代码也存在这样的问题,在视频的10分50秒左右有出现过,祝学习愉快~

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

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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