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

Posted

技术标签:

【中文标题】CSS3 动画完成时是不是有回调?【英文标题】:Is there a callback on completion of a CSS3 animation?CSS3 动画完成时是否有回调? 【发布时间】:2011-09-05 09:35:23 【问题描述】:

有没有办法在css3动画的情况下实现回调函数?如果是 javascript 动画,它是可能的,但在 css3 中找不到任何方法。

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

【问题讨论】:

Callback on CSS transition 的可能重复项 如果你想做简单的 CSS 动作,比如在元素过渡后隐藏元素,也许你不需要回调,你可以用动画的关键帧来解决你的问题。跨度> @givanse 这个问题是关于 CSS 过渡,而不是 CSS 动画。 【参考方案1】:

如果您使用 Javascript 而不是 CSS 创建动画,那么您需要使用动画 API 来设置动画的 onfinish event 的回调。

animation = myAnimatedElement.animate([
    transform: 'translateX(0px)',
    transform: 'translateX(-100px)',
], 700);

animation.onfinish = (e) => 
    // Do something after the animation finishes
;

请记住,如果动画被取消、移除或暂停,则不会触发 onfinish 事件。您可能还想为这些事件添加侦听器,具体取决于您的需要。

【讨论】:

【参考方案2】:

您可以通过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 Fiddle Demo

【讨论】:

加分项是它与 jQuery animate 共享 API 规范,但仍利用 CSS 动画的硬件渲染平滑度。我们只是用这个替换了几乎所有地方的 jQuery animate。【参考方案3】:

是的,有。回调是一个事件,因此您必须添加一个事件侦听器来捕获它。这是一个使用 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/

【讨论】:

对于 IE10,它是“MSAnimationEnd”(参见 msdn.microsoft.com/en-us/ie/hh272902#_CSSAnimations) 这是transitionend,而不是animationend @MichaelJones 不,这是针对 css3 过渡的。问题是关于动画的。 @MartinWittemann IE10 final 现在使用animationend msdn.microsoft.com/en-us/library/ie/…。 @Husky 该代码在 Chrome 和 FF 14 中确实有效,请参阅更新的小提琴 jsfiddle.net/W3y7h 复制***.com/questions/9255279/… 有更完整的解决方案

以上是关于CSS3 动画完成时是不是有回调?的主要内容,如果未能解决你的问题,请参考以下文章

在Vue中使用GSAP完成动画(三)动画事件

AngularJS css 动画 + 完成回调

如何在动画结束时设置属性或任何回调? [复制]

带有回调的AngularJS动画,等待下一个动画开始

UITableView 行动画持续时间和完成回调

在 Flutter 中完成“构建”功能时是不是有任何回调告诉我?