为什么显示不出来效果了?

来源:2-7 css3实现其他显示隐藏效果

Aurora_Meteor

2020-04-12 20:44:18

一步一步跟着老师写完的,怎么就一直效果和老师的相反呢?特别是最后几步的最后几种css实现方式,我在IE中的效果都是点击隐藏后盒子消失控制台打印一个hide,再点显示就什么都没有;然后我又在Chrome里试了试,发现效果一样,不管调用哪种动画都是只有点击隐藏的时候盒子隐藏,再点击就没有都不出现了,和IE不同的是打印结果会出现hidden但是只出现一次,再点击显示和隐藏也都会打印结果但是只有show和hide了,在控制台元素部分也能看出来盒子存在了但就是看不到。

<!DOCTYPE html>

<html lang="zh-CN">


<head>

    <meta charset="UTF-8">

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

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

    <style>

        body {

            width: 400px;

            margin: 0 auto;

        }


        .btn {

            width: 50%;

            height: 30px;

        }


        #box {

            /* display: none; */

            width: 100%;

            /* height: 200px; */

            /* padding: 100px 0; */

            background-color: red;

            overflow: hidden;

        }


        .transition {

            -o-transition: all .5s;

            -ms-transition: all .5s;

            -moz-transition: all .5s;

            -webkit-transition: all .5s;

            transition: all .5s;

        }


        .fadeOut {

            visibility: hidden !important;

            opacity: 0 !important;

        }


        .slideUpDownCollapse {

            height: 0 !important;

            padding-top: 0 !important;

            padding-bottom: 0 !important;

        }


        .slideLeftRightCollapse {

            width: 0 !important;

            padding-left: 0 !important;

            padding-right: 0 !important;

        }

    </style>

</head>


<body>

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

    <div id="box" class="">

        <p>123</p>

        <p>123</p>

        <p>123</p>

        <p>123</p>

    </div>


    <script src="../js/jquery.js"></script>

    <script src="../js/transition.js"></script>

    <script src="../js/showhide.js"></script>

    <script>

        // console.log(window.mt.transition.end);

        // console.log(window.mt.transition.isSupport);


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

        css3.fadeSlideLeftRight.init($box);


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

            css3.fadeSlideLeftRight.show($box);

        });

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

            css3.fadeSlideLeftRight.hide($box);

        });

        // 小A

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

            console.log(e.type);

        });

    </script>

</body>


</html>

(function () {

    var transitionEndEventName = {

        transition: 'transitionend',

        MozTransition: 'transitionend',

        WebkitTransition: 'webkitTransitionEnd',

        OTransition: 'oTransitionEnd otransitionend',

    };

    var transitionEnd = '',

        isSupport = false;


    for (var name in transitionEndEventName) {

        if (document.body.style[name]!==undefined) {

            transitionEnd = transitionEndEventName[name];

            isSupport = true;

            break;

        }

    }


    window.mt = window.mt || {};

    window.mt.transition = {

        end: transitionEnd,

        isSupport: isSupport

    };

})();

var transition = window.mt.transition;


function init($elem, hiddenCallback) {

    if ($elem.is(':hidden')) { //hidden

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

        if (typeof hiddenCallback === 'function') hiddenCallback();

        $elem.addClass('fadeOut');

    } else { //shown

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

    }

}


function show($elem, callback) {

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

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

    $elem.data('status', 'show').trigger('show');

    callback();

}


function hide($elem, callback) {

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

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

    $elem.data('status', 'hide').trigger('hide');

    callback();

}


var silent = {

    init: init,

    show: function ($elem) {

        show($elem, function () {

            $elem.show();

            $elem.data('status', 'shown').trigger('shown');

        });

    },

    hide: function ($elem) {

        hide($elem, function () {

            $elem.hide();

            $elem.data('status', 'hidden').trigger('hidden');

        });

    }

};

var css3 = {

    fade: {

        init: function ($elem) {

            css3._init($elem, 'fadeOut');

        },

        show: function ($elem) {

            css3._show($elem, 'fadeOut');

        },

        hide: function ($elem) {

            css3._hide($elem, 'fadeOut');

        }

    },

    slideUpDown: {

        init: function ($elem) {

            $elem.height($elem.height());

            css3._init($elem, 'slideUpDownCollapse');

        },

        show: function ($elem) {

            css3._show($elem, 'slideUpDownCollapse');

        },

        hide: function ($elem) {

            css3._hide($elem, 'slideUpDownCollapse');

        }

    },

    slideLeftRight: {

        init: function ($elem) {

            $elem.width($elem.width());

            css3._init($elem, 'slideLeftRightCollapse');

        },

        show: function ($elem) {

            css3._show($elem, 'slideLeftRightCollapse');

        },

        hide: function ($elem) {

            css3._hide($elem, 'slideLeftRightCollapse');

        }

    },

    fadeSlideUpDown: {

        init: function ($elem) {

            $elem.height($elem.height());

            css3._init($elem, 'fadeOut slideUpDownCollapse');

        },

        show: function ($elem) {

            css3._show($elem, 'fadeOut slideUpDownCollapse');

        },

        hide: function ($elem) {

            css3._hide($elem, 'fadeOut slideUpDownCollapse');

        }

    },

    fadeSlideLeftRight: {

        init: function ($elem) {

            $elem.width($elem.width());

            css3._init($elem, 'fadeOut slideLeftRightCollapse');

        },

        show: function ($elem) {

            css3._show($elem, 'fadeOut slideLeftRightCollapse');

        },

        hide: function ($elem) {

            css3._hide($elem, 'fadeOut slideLeftRightCollapse');

        }

    }

};

css3._init = function ($elem, className) {

    $elem.addClass('transition');

    init($elem, function () {

        $elem.addClass(className);

    });

};

css3._show = function ($elem, className) {

    show($elem, function () {

        $elem.off(transition.end).one(transition.end, function () {

            $elem.data('status', 'shown').trigger('shown');

        });

        $elem.show();

        setTimeout(function () {

            $elem.removeClass('slideUpDownCollapse');

        }, 20);

    });

};

css3._hide = function ($elem, className) {

    hide($elem, function () {

        $elem.off(transition.end).one(transition.end, function () {

            $elem.hide();

            $elem.data('status', 'hidden').trigger('hidden');

        });

        $elem.addClass('fadeOut');

    });

};

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


        }

    }

};


写回答

2回答

好帮手慕星星

2020-04-13

同学你好,自己能够修改正确是很棒的哦!

还是transition过渡属性的问题,IE10版本以下的浏览器不支持这个属性

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

所以无法实现过渡效果,会直接显示隐藏。目前不考虑低版本浏览器,主流浏览器测试成功即可。

祝学习愉快!

0

Aurora_Meteor

提问者

2020-04-12

我按照源码将以下部分修改后在Chrome中可以正确实现效果了,可是在IE中却只能实现生硬的显示和隐藏,没有那种渐变的动画,麻烦老师解答


在showHide.js中

function init($elem, hiddenCallback) {

    if ($elem.is(':hidden')) { //hidden

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

        if (typeof hiddenCallback === 'function') hiddenCallback();

    } else { //shown

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

    }

}


css3._show = function ($elem, className) {

    show($elem, function () {

        $elem.off('transition.end').one('transition.end', function () {

            $elem.data('status', 'shown').trigger('shown');

        });

        $elem.show();

        setTimeout(function () {

            $elem.removeClass(className);

        }, 20);

    });

};

css3._hide = function ($elem, className) {

    hide($elem, function () {

        $elem.off('transition.end').one('transition.end', function () {

            $elem.hide();

            $elem.data('status', 'hidden').trigger('hidden');

        });

        $elem.addClass(className);

    });

};

另外我原本的文件命名都是showhide,后来改成了showHide,包括HTML中的引入名也改了

0

0 学习 · 14456 问题

查看课程