var transitionEndEventName = "XXX"; //figure out, e.g. "webkitTransitionEnd"..
var elemToAnimate = ... //the thing you want to animate..
var done = false;
var transitionEnded = function(){
done = true;
//do your transition finished stuff..
elemToAnimate.removeEventListener(transitionEndEventName,
transitionEnded, false);
};
elemToAnimate.addEventListener(transitionEndEventName,
transitionEnded, false);
//animation triggering code here..
//ensure tidy up if event doesn't fire..
setTimeout(function(){
if(!done){
console.log("timeout needed to call transition ended..");
transitionEnded();
}
}, XXX); //note: XXX should be the time required for the
//animation to complete plus a grace period (e.g. 10ms)
5条答案
按热度按时间vd2z7a6w1#
是的,如果浏览器支持这些功能,那么当转换完成时会触发一个事件。然而,实际的事件在浏览器之间是不同的:
webkitTransitionEnd
transitionend
msTransitionEnd
oTransitionEnd
然而,你应该注意到
webkitTransitionEnd
并不总是触发!这已经让我陷入了很多次,并且似乎发生在动画对元素没有影响的情况下。为了解决这个问题,在没有按预期触发事件处理程序的情况下使用超时来触发事件处理程序是有意义的。关于这个问题的博客文章可以在这里找到:服务器内部错误 *考虑到这一点,我倾向于在一段代码中使用这个事件,看起来有点像这样:
注意:要获取转换事件结束名称,您可以使用在中作为答案发布的方法:How do I normalize CSS3 Transition functions across browsers? .
注:此问题还涉及:- CSS3 transition events
xzabzqsa2#
我知道Safari实现了一个webkitTransitionEnd回调,您可以直接将其附加到具有转换的元素。
他们的例子(重新格式化为多行):
8xiog9wr3#
我使用下面的代码,比试图检测浏览器使用的特定结束事件要简单得多。
或者,如果你使用引导,那么你可以简单地做
这是因为他们在bootstrap.js中包含了以下内容
jslywgbw4#
这可以通过
transitionend
事件轻松实现。参见文档here。举个简单的例子:
ltskdhd15#
jQuery.transit plugin是一个用于CSS3转换和过渡的插件,可以从脚本调用CSS动画并给予你一个回调。