如何确定元素内的所有动画何时结束?
How do I determine when all animations inside an element have ended?
我正在尝试在包装器元素中的多个 CSS 动画完成后向包装器元素添加或删除 class。项目的数量及其动画持续时间可能会有所不同。动画是在 CSS classes 的帮助下描述的,一旦每个动画结束就会被删除。
function transitionToShown() {
backdrop.classList.add(CLASS_TRANSITIONING_IN);
dialog.classList.add(CLASS_TRANSITIONING_IN);
backdrop.addEventListener(
"animationend",
() => {
backdrop.classList.remove(CLASS_TRANSITIONING_IN);
},
{ once: true }
);
dialog.addEventListener(
"animationend",
() => {
dialog.classList.remove(CLASS_TRANSITIONING_IN);
},
{ once: true }
);
wrapper.addEventListener(
??How do I add/remove classes on the wrapper after animations on the dialog and backdrop have ended??
);
}
将 promises 与 Web 动画一起使用 API 似乎是一个简单的解决方案。即使 Web Animations API 被列为实验性的,它也得到了现代浏览器的广泛支持。
Promise.all(
wrapper.getAnimations({ subtree: true }).map(function (animation) {
return animation.finished;
})
).then(function () {
return wrapper.classList.remove(CLASS_SHOWN);
});
我正在尝试在包装器元素中的多个 CSS 动画完成后向包装器元素添加或删除 class。项目的数量及其动画持续时间可能会有所不同。动画是在 CSS classes 的帮助下描述的,一旦每个动画结束就会被删除。
function transitionToShown() {
backdrop.classList.add(CLASS_TRANSITIONING_IN);
dialog.classList.add(CLASS_TRANSITIONING_IN);
backdrop.addEventListener(
"animationend",
() => {
backdrop.classList.remove(CLASS_TRANSITIONING_IN);
},
{ once: true }
);
dialog.addEventListener(
"animationend",
() => {
dialog.classList.remove(CLASS_TRANSITIONING_IN);
},
{ once: true }
);
wrapper.addEventListener(
??How do I add/remove classes on the wrapper after animations on the dialog and backdrop have ended??
);
}
将 promises 与 Web 动画一起使用 API 似乎是一个简单的解决方案。即使 Web Animations API 被列为实验性的,它也得到了现代浏览器的广泛支持。
Promise.all(
wrapper.getAnimations({ subtree: true }).map(function (animation) {
return animation.finished;
})
).then(function () {
return wrapper.classList.remove(CLASS_SHOWN);
});