--- title: 'HTMLElement: animationcancel event' slug: Web/API/HTMLElement/animationcancel_event translation_of: Web/API/HTMLElement/animationcancel_event ---
一个 animationcancel
事件会在一个 CSS Animation 意外终止时触发. 换句话说, 就是任意时刻 CSS Animation 在没有发送 {{event("animationend")}} 事件时停止运行. 这种情况会在 {{cssxref("animation-name")}} 发生改变导致动画被移除时, 或者使用CSS隐藏了动画中的node节点. 因此要么node节点直接被隐藏,要么因为node节点的父节点被隐藏.
该事件的处理函数可以通过 {{domxref("GlobalEventHandlers.onanimationcancel", "onanimationcancel")}} 属性进行设置, 或者使用 {{domxref("EventTarget.addEventListener", "addEventListener()")}}.
Bubbles | Yes |
---|---|
Cancelable | No |
Interface | {{domxref("AnimationEvent")}} |
Event handler property | onanimationcancel |
这段代码获取一个当前在动画中的元素,并为它添加了一个animationcancel
事件监听. 然后设置该元素的 display
属性为 none
, 触发 animationcancel
事件.
同样, 使用 onanimationcancel
属性替换 addEventListener()
:
<div class="animation-example"> <div class="container"> <p class="animation">You chose a cold night to visit our planet.</p> </div> <button class="activate" type="button">Activate animation</button> <div class="event-log"></div> </div>
.container { height: 3rem; } .event-log { width: 25rem; height: 2rem; border: 1px solid black; margin: 0.2rem; padding: 0.2rem; } .animation.active { animation-duration: 2s; animation-name: slidein; animation-iteration-count: 2; } @keyframes slidein { from { transform: translateX(100%) scaleX(3); } to { transform: translateX(0) scaleX(1); } }
const animation = document.querySelector('p.animation'); const animationEventLog = document.querySelector('.animation-example>.event-log'); const applyAnimation = document.querySelector('.animation-example>button.activate'); let iterationCount = 0; animation.addEventListener('animationstart', () => { animationEventLog.textContent = `${animationEventLog.textContent}'animation started' `; }); animation.addEventListener('animationiteration', () => { iterationCount++; animationEventLog.textContent = `${animationEventLog.textContent}'animation iterations: ${iterationCount}' `; }); animation.addEventListener('animationend', () => { animationEventLog.textContent = `${animationEventLog.textContent}'animation ended'`; animation.classList.remove('active'); applyAnimation.textContent = "Activate animation"; }); animation.addEventListener('animationcancel', () => { animationEventLog.textContent = `${animationEventLog.textContent}'animation canceled'`; }); applyAnimation.addEventListener('click', () => { animation.classList.toggle('active'); animationEventLog.textContent = ''; iterationCount = 0; let active = animation.classList.contains('active'); if (active) { applyAnimation.textContent = "Cancel animation"; } else { applyAnimation.textContent = "Activate animation"; } });
{{ EmbedLiveSample('Live_example', '100%', '150px') }}
Specification | Status | Comment |
---|---|---|
{{SpecName("CSS3 Animations", "#eventdef-animationevent-animationcancel")}} | {{Spec2("CSS3 Animations")}} | Initial definition |
{{Compat("api.HTMLElement.animationcancel_event")}}
animationstart
, animationend
, animationiteration
Document
targets: animationcancel
Window
targets: animationcancel