点击显示 然后快递点隐藏 显示 再点显示就显示不出 有问题 这该怎么解决

来源: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() 就不会出现快速点击隐藏显示 显示不出的问题的

0

0 学习 · 14456 问题

查看课程