对于事先在css
中设置了display: none
的元素,为其用transition
进行动画效果时,需要先将其显示,再改变 class
类名
ele.style.display = 'block';
setTimeout(function() {
ele.classList.add('in');
}, 0);
我的做法是这样的,不过感觉好麻烦,尤其每次都要写一个 setTimeout
。
求赐教有什么更好的方法?
PHP中文网2017-04-10 14:55:59
只能用visibility:hidden;来玩玩了,再配合opacity,创造fade-in fade-out的效果。
至于兼容性处理,详见本文:http://www.greywyvern.com/?post=337#
ringa_lee2017-04-10 14:55:59
你可以封装一下,我现在用这个 https://gist.github.com/bammoo/33c5c797c76422a06cae:
/**
* Shortcut for adding animation class name to dom element
* @param {string} cls class name
* @param {Function} cb callback
* @param {Function} lastItemCb callback execute at last elment animated
* @return {object} this
*/
$.fn.classAnimoEnd = function(cls, cb, lastItemCb) {
var el = this;
cb && (cb = $.proxy(cb, el));
var count = $(el).length;
$(el)
.removeClass('animated ' + cls)
.one($.support.animate.end, function () {
cb && cb();
$(el).removeClass('animated');
if(count > 1) {
count --;
if(count === 0)
lastItemCb && lastItemCb();
}
})
.addClass('animated ' + cls);
if(!$(el).css('display') !== 'none' )
$(el).show();
return this;
}
迷茫2017-04-10 14:55:59
隐藏一个元素的方法有很多种
这些方法中,有的是隐藏后不占据空间,有的要占据,有的是离散状态(没有transition),有的可以有transition。你根据你的需求,然后选择一种方式就好了,实在不能解决你要的动画,用jquery的animate吧。