CSS3动画完成时是否有回调?


91

在css3动画的情况下,有什么方法可以实现回调函数?如果使用Javascript动画,则可能会在CSS3中找到实现它的方法,但找不到任何方法。

我可以看到的一种方法是在动画持续时间之后执行回调,但是并不能确保始终在动画结束后立即调用它。这将取决于浏览器UI队列。我想要一个更强大的方法。有什么线索吗?



如果要执行简单的CSS动作,例如,在过渡后隐藏元素,也许不需要回调,而是可以解决动画关键帧的问题。
Madmadi

Answers:


130

就在这里。回调是一个事件,因此您必须添加事件侦听器才能捕获它。这是jQuery的一个示例:

$("#sun").bind('oanimationend animationend webkitAnimationEnd', function() { 
   alert("fin") 
});

还是纯js:

element.addEventListener("webkitAnimationEnd", callfunction,false);
element.addEventListener("animationend", callfunction,false);
element.addEventListener("oanimationend", callfunction,false);

现场演示:http//jsfiddle.net/W3y7h/


3
对于IE10它的'MSAnimationEnd'(见msdn.microsoft.com/en-us/ie/hh272902#_CSSAnimations
马丁Wittemann

6
transitionend,不是animationend

13
@MichaelJones不,这是用于css3转换的。问题是关于动画的。
joshvermaire 2012年

4
@MartinWittemann IE10 final现在使用animationend msdn.microsoft.com/en-us/library/ie/…。@Husky代码的功能在Chrome和FF 14的工作,查看更新后的小提琴jsfiddle.net/W3y7h
methodofaction

1
重复的stackoverflow.com/questions/9255279/…具有更完整的解决方案
vanthome

3

jQuery Transit Plugin是执行回调(也可以处理CSS3过渡/浏览器兼容性)的一种简单方法。例:

//Pulsing, moving element
$("#element").click( function () {
    $('#element').transition({ opacity: 0, x: '75%' }, function () { $(this).transition({ opacity: 1, x: '0%' }).trigger("click"); });
});

JS小提琴演示


1
它与jQuery动画共享API规范的好处是,它仍然利用了硬件渲染的CSS动画的平滑性。我们几乎在所有地方都用jQuery动画代替了它。
logan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.