老师为什么点击显示之后会自动触发隐藏
# 粘贴全部相关代码,切记添加代码注释(请勿截图)
<!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 {
width: 400px;
margin: 0 auto;
}
.btn {
width: 50%;
height: 30px;
float: left;
}
#box {
display: none;
/* visibility: hidden;
opacity: 1; */
width: 100%;
height: 200px;
background-color: red;
float: left;
}
.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: 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>
<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 () { }
}
};
正在回答
同学你好,同学的疑问是点击隐藏按钮之后,再点击显示按钮,元素显示了几秒钟又隐藏了吗?如果是的话,那么解答如下:
这是因为当第一次点击隐藏按钮,执行hide方法中的代码后,会给元素绑定一个transitionend事件,即过渡结束后就触发此事件。当点击显示时,显示的过渡效果结束后,就会触发transitionend事件,执行 $elem.hide();隐藏。建议:把事件注释就可以了
老师在下节视频中会讲解另一种解决方法,同学可以继续往下学习~祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星