为什么显示不出来效果了?
来源: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回答
同学你好,自己能够修改正确是很棒的哦!
还是transition过渡属性的问题,IE10版本以下的浏览器不支持这个属性
所以无法实现过渡效果,会直接显示隐藏。目前不考虑低版本浏览器,主流浏览器测试成功即可。
祝学习愉快!
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中的引入名也改了
相似问题