直接点显示没反应,只能先按隐藏再点显示才能显示

来源:2-5 用css3实现淡入淡出效果(2)

慕仰3297879

2020-03-30 16:23:05

<!DOCTYPE html>

<html>

<head>

<title>显示隐藏模块</title>

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

<style type="text/css">

body {

        width: 400px;

        margin: 0 auto;

    }


    .btn {

        width: 50%;

        height: 30px;

    }


    #box {

    display: none;

   

        width: 100%;

        height: 200px;

        background-color: green;

    }

    .transition{

    -o-transition: all .5s;

    -webkit-transition: all .5s;

-ms-transition: all .5s;

    -moz-transition: all .5s;

    transition: all .5s;

    }

    .fadeOut{

    visibility: hidden;

        opacity: 0;

    }

</style>

</head>

<body>



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

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

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



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

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

<script type="text/javascript">


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


css3.fade.init($box);

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

css3.fade.show($box);

});


$('#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');

},

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.trigger('hide');


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

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

}

}

}


写回答

1回答

好帮手慕夭夭

2020-03-30

同学你好,是因为如下判断中,hidden前面没有加冒号,导致初始化时执行else,为元素添加了shown。当第一次点击显示按钮,判断状态为shown,所以不会执行显示了。

http://img.mukewang.com/climg/5e81b3f709e9b7f305640224.jpg

另外,在隐藏的方法中,要添加hide方法把元素真正的隐藏。即相当于设置了display:none,这样他才不会占据页面的位置。

http://img.mukewang.com/climg/5e81b50409c17e1707530213.jpg

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

0

0 学习 · 14456 问题

查看课程