老师为什么show设置了状态hide没设置状态就不能在隐藏时候点击显示而有反应呢

来源:2-3 静静的显示和隐藏(2)

母鸡阿

2021-01-19 12:15:13

<!DOCTYPE html>

<html>

<head>

<title>下拉菜单组件化-显示与隐藏2</title>

<script type="text/javascript" src="../js/jquery.js"></script>

    <style type="text/css">

        body{width: 400px;margin: 50px auto;background-color: yellow;}

        .btn{width: 50%;height: 50px;float: left;}

        .box{width: 100%;height: 200px;background-color: red;}

    </style>

</head>

<body>

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

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

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


    <script>

    var silent = {

    init:function($elem){

    if($elem.is(':hidden')){//判断$elem元素是否处在隐藏状态

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

    }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');

    },

    hide:function($elem){

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

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

    $elem.data('status','hide').trigger('hide');注释这一行

    $elem.hide();

    $elem.data('status','hiddenn').trigger('hiddenn');也注释这一行

    }

    }

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

    silent.init($box);

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

    silent.show($box);

    })

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

    silent.hide($box);

    })


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

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

    $box.css('background-color','blue');

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

    setTimeout(function(){

    $box.css('background-color','');

    },1000)

    }

    })

    </script>

</body>

</html>


写回答

1回答

好帮手慕久久

2021-01-19

同学你好,解答如下:

点击show按钮时,会执行show方法。在show方法中,会先判断“.box”的状态,如果“.box”是show、shown状态,则会执行“return”语句。而“return”会终止show方法,即代码不会往下执行了,因此“.box”就无法显示了:

http://img.mukewang.com/climg/60067b8f09cbcfe807310222.jpg

http://img.mukewang.com/climg/60067bac0920f87709540207.jpg

假设“.box“初始时是显示的,则会被添加自定义属性“status”,值为shown:

http://img.mukewang.com/climg/60067c8f098bc5eb07940223.jpg

此时点击隐藏按钮,会把“.box“隐藏。如果在hide方法中,不更改“.box“的自定义属性“status”的值,那么再次点击显示按钮时,由于“status”是shown,所以会执行return,则“ $elem.show()”这句代码就不会执行了,从而元素不会显示。

祝学习愉快!

0

0 学习 · 14456 问题

查看课程