点击显示 然后快递点隐藏 显示 再点显示就显示不出 有问题 这该怎么解决
来源:2-5 用css3实现淡入淡出效果(2)
琥珀_2020
2019-12-24 19:49:25
<!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>显示隐藏模块</title> <link rel="stylesheet" href="./css/base.css"> <style> body { /* position: relative; */ width: 400px; margin: 0 auto; } .btn { width: 50%; height: 30px; } #box { display: none; width: 100%; height: 200px; background-color: red; } .transiton { 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="transiton fadeOut"> </div> <button class="btn btn2">显示2</button> <script src="./js/jquery.js"></script> <script src="./js/showHide.js"></script> <script> // <script src="./js/showHide.js"> var $box = $('#box'); // silent.init($box); css3.fade.init($box); $('#btn-show').on('click', function () { css3.fade.show($box); }); $('#btn-hide').on('click', function () { css3.fade.hide($box); }) // 发布订阅的方式 // 小A $box.on('show shown hide hidden', function (e) { console.log(e.type); }); // $box.on('click', function(){ // }) </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.one('transitionend', function(){ $elem.hide(); $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
提问者
2019-12-24
show: function ($elem) { if($elem.data('status') === 'show') return; if($elem.data('status') === 'shown') return; $elem.data('status', 'show').trigger('show'); $elem.off('transitionend').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.off('transitionend').one('transitionend', function(){ $elem.hide(); $elem.data('status', 'hidden').trigger('hidden'); }) $elem.addClass('fadeOut'); }
解决问题了 $elem.off('transitionend').one('transitionend', function(){
$elem.data('status', 'shown').trigger('shown');
}); 在这里加个 off() 就不会出现快速点击隐藏显示 显示不出的问题的
相似问题