JS об'єкт AnimationEvent
Загальний опис
AnimationEvent – це події, що активуються під час виконання CSS-анімацій. Вони включають такі події, як animationstart (початок анімації), animationiteration (кожна нова ітерація анімації) та animationend (завершення анімації). З їх допомогою JavaScript може реагувати на зміни стану анімації елементів у DOM, створюючи інтерактивні та динамічні ефекти.
Щоб використати AnimationEvent, спочатку потрібно додати CSS-анімацію до елемента. Наприклад, якщо у CSS створена анімація для елемента з ключовими кадрами, JavaScript може реагувати на етапи цієї анімації, використовуючи події, описані нижче.
Для відстеження початку анімації застосовується animationstart:
element.addEventListener('animationstart', (event) => {
console.log('Анімація почалась для елемента:', event.target);
});
Цей код виконується, коли анімація стартує, дозволяючи, наприклад, змінювати або завантажувати певні ресурси на початку анімації.
Подія animationiteration відслідковує кожну нову ітерацію (повторення) анімації:
element.addEventListener('animationiteration', (event) => {
console.log('Ітерація анімації для елемента:', event.target);
});
Це дозволяє виконувати код кожного разу, коли анімація починається заново, що корисно для циклічних анімацій.
Подія animationend спрацьовує, коли анімація завершується:
element.addEventListener('animationend', (event) => {
console.log('Анімація завершилась для елемента:', event.target);
});
animationend можна використовувати для повернення елемента у вихідний стан або очищення ресурсів після завершення анімації. Під час роботи з AnimationEvent варто враховувати об’єкт event, який містить властивості, такі як elapsedTime (час з моменту початку анімації) і animationName (назва анімації). Ці властивості корисні для контролю анімації, коли необхідно реагувати на певні ефекти, що виникають під час роботи анімації.
- Порада
-
автор: Bondevent.elapsedTimeможе бути корисним для отримання інформації про тривалість анімації, що дозволяє контролювати або логувати час виконання анімації. Використовуйтеconsole.log(event.elapsedTime), щоб швидко оцінити продуктивність анімації. - Порада
-
Якщо потрібна анімація на кожній ітерації циклу, використовуйте
автор: Bondanimationiteration, щоб уникнути обчислень між ітераціями, зменшуючи навантаження. Це дозволяє додавати ефекти або змінювати властивості елемента тільки на певних етапах. - Порада
-
Щоб зупиняти анімацію умовно, наприклад, при певній кількості ітерацій, можна додати лічильник, який збільшується на
автор: Bondanimationiterationі припиняє анімацію, коли досягнуто потрібного значення, використовуючи CSS або JavaScript.
Синтаксис
element.addEventListener('animationstart', function(event) { /* Код для початку анімації */ });
element.addEventListener('animationiteration', function(event) { /* Код для повторення анімації */ });
element.addEventListener('animationend', function(event) { /* Код для завершення анімації */ });
властивості
| Властивість | Опис |
|---|---|
| animationName | Властивість об'єкта події анімації, що повертає назву CSS-анімації, яка викликала подію. Це корисно для відстеження конкретних анімацій, коли до елемента застосовано декілька анімацій. |
| elapsedTime | Властивість, що показує час (у секундах), який минув з початку виконання анімації до моменту виникнення події. Допомагає контролювати тривалість та етапи анімації в реальному часі. |
| pseudoElement | Властивість, яка вказує на псевдоелемент, що викликав анімаційну подію (наприклад, `::before` чи `::after`). Якщо подія стосується самого елемента, повертає порожній рядок. |
Переглядачі
| Переглядач | |||||
|---|---|---|---|---|---|
| 43 | 5 | 9 | 30 | 12 |
| Переглядач | ||||
|---|---|---|---|---|
| 43 | 43 | 5 | 9 |
| Переглядач | ||
|---|---|---|
| - | - |
Приклади
+ запропонувати свій приклад у пісочниці
Цей код перезапускає анімацію кожного разу, коли вона завершується, поки не буде виконано п'ять ітерацій. Це корисно для обмежених за тривалістю або кількістю повторень анімацій.
HTML
<div id="demo-element">Демонстраційний елемент</div>
JS
const element = document.getElementById('demo-element');
let counter = 0;
element.addEventListener('animationend', (event) => {
if (counter < 5) {
event.target.style.animation = 'none';
setTimeout(() => event.target.style.animation = '', 0); // Перезапуск анімації
counter++;
}
});
У цьому прикладі після першої ітерації анімації додається новий клас до елемента. Це дозволяє створювати ефекти, що розширюються із кожним повторенням анімації, не змінюючи початковий вигляд елемента.
HTML
<div id="demo-element">Демонстраційний елемент</div>
JS
const element = document.getElementById('demo-element');
element.addEventListener('animationiteration', (event) => {
if (event.elapsedTime > 2) {
event.target.classList.add('highlight'); // Додає клас після першої ітерації
}
});
У цьому прикладі кнопка запускає анімацію елементу animatedBox, і кожна з подій animationstart, animationiteration, та animationend записує інформацію про відповідні етапи у "Журнал подій".
Коментарі
Коментарів ще немає — будьте першим!