对于事先在css中设置了display: none的元素,为其用transition进行动画效果时,需要先将其显示,再改变 class 类名
css
display: none
transition
class
ele.style.display = 'block'; setTimeout(function() { ele.classList.add('in'); }, 0);
我的做法是这样的,不过感觉好麻烦,尤其每次都要写一个 setTimeout。 求赐教有什么更好的方法?
setTimeout
欢迎选择我的课程,让我们一起见证您的进步~~
只能用visibility:hidden;来玩玩了,再配合opacity,创造fade-in fade-out的效果。 至于兼容性处理,详见本文:http://www.greywyvern.com/?post=337#
你可以写个函数封装它,或者不用diaplay: none,直接用opacity: 0来隐藏
也许采用 animation 是一个好办法
animation
你可以封装一下,我现在用这个 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; }
这个简单啊,你把display:block这个 放到一个类里,和动画的特效放在同一个类不久ok了
隐藏一个元素的方法有很多种
这些方法中,有的是隐藏后不占据空间,有的要占据,有的是离散状态(没有transition),有的可以有transition。你根据你的需求,然后选择一种方式就好了,实在不能解决你要的动画,用jquery的animate吧。
只能用visibility:hidden;来玩玩了,再配合opacity,创造fade-in fade-out的效果。
至于兼容性处理,详见本文:http://www.greywyvern.com/?post=337#
你可以写个函数封装它,或者不用diaplay: none,直接用opacity: 0来隐藏
也许采用
animation
是一个好办法你可以封装一下,我现在用这个 https://gist.github.com/bammoo/33c5c797c76422a06cae:
这个简单啊,你把display:block这个 放到一个类里,和动画的特效放在同一个类不久ok了
隐藏一个元素的方法有很多种
等等,我就不罗列了。
这些方法中,有的是隐藏后不占据空间,有的要占据,有的是离散状态(没有transition),有的可以有transition。你根据你的需求,然后选择一种方式就好了,实在不能解决你要的动画,用jquery的animate吧。