Spec-Zone.ru › Web APIs

Анимация: удаление события

Базовая Широко доступная

Эта функция хорошо отработана и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с марта 2020 года.

  • Узнать больше
  • Полная совместимость
  • Отправить отзыв

Событие remove интерфейса Animation срабатывает, когда анимация автоматически удаляется браузером.

Синтаксис

Используйте имя события в методах, таких как addEventListener(), или задайте обработчик события.

addEventListener('remove', (event) => { })
onremove = (event) => { }

Тип события

Объект AnimationPlaybackEvent. Наследуется от Event.

Событие AnimationPlaybackEvent

Свойства события

Помимо перечисленных ниже свойств, доступны свойства родительского интерфейса 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();
});

Результат

Спецификации

Спецификация
Web Animations
# dom-animation-onremove
Web Animations
# remove-event

Совместимость браузеров

Рабочие столы Мобильные устройства
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API