Анимация: удаление события
Базовая Широко доступная
Эта функция хорошо отработана и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с марта 2020 года.
Событие remove интерфейса Animation срабатывает, когда анимация автоматически удаляется браузером.
Синтаксис
Используйте имя события в методах, таких как addEventListener(), или задайте обработчик события.
addEventListener('remove', (event) => { })
onremove = (event) => { }
Тип события
Объект AnimationPlaybackEvent. Наследуется от Event.
Свойства события
Помимо перечисленных ниже свойств, доступны свойства родительского интерфейса Event.
-
AnimationPlaybackEvent.currentTimeТолько для чтения -
Текущее время анимации, которая сгенерировала событие.
-
AnimationPlaybackEvent.timelineTimeТолько для чтения -
Значение времени шкалы анимации, которая сгенерировала событие.
Примеры
Удаление заменённых анимаций
В этом примере у нас есть элемент <button id="start">, и обработчик событий, который выполняется при каждом перемещении мыши. Обработчик события mousemove создаёт анимацию, которая перемещает <button> в позицию указателя мыши. Это может привести к большому списку анимаций, что может вызвать утечку памяти. По этой причине современные браузеры автоматически удаляют анимации, которые перекрываются другими анимациями.
Количество созданных анимаций отображается. Используется обработчик события remove для подсчёта и отображения количества удалённых анимаций.
Все анимации, кроме одной, в конечном итоге должны быть удалены.
HTML
<button id="start">Click to drag</button> <br /> <button id="reset">Reset example</button> <p> Click the button to start the animation (disabled by default to protect those who suffer migraines when experiencing such animations). </p> <p>Animations created: <span id="count-created">0</span></p> <p>Animations removed: <span id="count-removed">0</span></p>
CSS
:root,
body {
margin: 0;
padding: 0;
height: 100%;
}
button {
margin: 0.5rem 0;
}
JavaScript
const button = document.querySelector("#start");
let created = 0;
let removed = 0;
button.addEventListener(
"click",
() => {
document.body.addEventListener("mousemove", (event) => {
const animation = button.animate(
{ transform: `translate(${event.clientX}px, ${event.clientY}px)` },
{ duration: 500, fill: "forwards" },
);
created++;
showCounts();
// the remove event fires after the animation is removed
animation.addEventListener("remove", () => {
removed++;
showCounts();
});
});
},
{ once: true },
);
function showCounts() {
document.getElementById("count-created").textContent = created;
document.getElementById("count-removed").textContent = removed;
}
const reset = document.querySelector("#reset");
reset.addEventListener("click", () => {
document.location.reload();
});
Результат
Спецификации
Совместимость браузеров
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
remove_event |
84 | 84 | 75 | 70 | 13.1 | 84 | 79 | 60 | 13.4 | 14.0 | 84 |
См. также
- Web Animations API
-
Animation,AnimationPlaybackEvent -
Animation.replaceState, чтобы проверить, была ли анимация удалена -
Animation.persist(), чтобы предотвратить удаление анимации
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Animation/remove_event