【发布时间】:2015-07-03 13:20:46
【问题描述】:
我有一个 CSS 动画,它被应用到一个带有 CSS 类的 HTML 元素。我还有一个附加到animationend 的事件侦听器(它是一个现代 Windows 应用程序,因此浏览器仅限 IE11)。我看到的是有时事件被触发,有时它不会。无论事件触发如何,我总能看到它的视觉动画。对我来说,这看起来像是某种竞赛条件。
我已经搜索了网络,试图了解可能导致此事件不被触发的原因,但我没有找到任何令人满意的结果。我在MDN 上找到了以下内容:
注意:如果中止转换,则不会触发 transitionend 事件,因为动画属性的值在转换完成之前已更改。
UPDATE1: transitionend 与 animationend 无关,因此此信息无关。
我不确定这是否适用于 CSS 动画。有没有人对可能导致这种情况的原因有任何想法?如果有任何事件可以检测到动画被中止,这也可能是一个有用的解决方法。
UPDATE2:我正在使用的当前解决方法:
element.addEventListener("animationstart", function () {
setTimeout(function () {
// do stuff
}, animationDuration);
});
【问题讨论】:
-
没有立即想到,但我知道
animationend与transitionend不同。transitionend事件用于 CSS 转换,使用transitionCSS 属性。 developer.mozilla.org/en/docs/Web/CSS/transitionanimationend事件用于 CSS 动画,使用keyframes和animationCSS 属性。 developer.mozilla.org/en-US/docs/Web/CSS/animation 所以也许这可以帮助你:developer.mozilla.org/en-US/docs/Web/API/AnimationEvent -
我就是这么想的。我正在使用
keyframes和animation。没有过渡。 -
你在使用
animation-iteration-count: infinite;吗?我没有 Windows 机器来测试 IE11,但在 chrome 上,animation-iteration-count: infinite;不会触发animationend事件。 -
我的 css 类中没有指定
animation-iteration-count,但我假设如果默认为infinite,我永远不会得到animationend。 -
如您所见,这个问题是 3 年前提出的。抱歉,我目前没有此问题的重现环境。
标签: javascript html css css-animations