Наповнення JS розділу

Добридень, Пані та Панове, завдяки вам вдалося зібрати більше 19тис грн з необхідних 15тис на впровадження JS розділу.

JS розділ вже впроваджено - переходимо до його наповнення і почнемо бігти довгий марафон, адже JS має більше 1100 різноманітних методів, властивостей, подій і т.д., які необхідно описати.

Будемо працювати, і вдень, і вночі, щоб орієнтовно взимку закінчити наповнювати JS розділ!

Ви також можете допомогти нам в цьому. Долучайтеся до нашої спільноти в дискорді - ставайте її частиною і допомагайте нашому розвитку.

Також, підтримуйте нас матеріально.

JS властивість Event.transitionend

Загальний опис

transitionend — це подія JavaScript, яка виникає, коли CSS-перехід (transition) завершується на елементі. Ця подія дозволяє вам реагувати на завершення анімацій, які були визначені за допомогою властивості transition в CSS. Наприклад, коли елемент змінює свій розмір, прозорість або інші стилі за допомогою переходу, ви можете виконати додаткові дії, коли зміна завершиться.

Щоб працювати з подією transitionend, ви можете додати обробник події до елемента за допомогою методу addEventListener. Приклад:

const box = document.querySelector('.box');
box.addEventListener('transitionend', (event) => {
  console.log('Переход завершено для властивості: ', event.propertyName);
});

У цьому прикладі, коли завершиться перехід, пов'язаний з елементом box, буде виведено назву CSS-властивості, для якої завершився перехід. Об'єкт події, переданий в обробник, надає інформацію про те, яка саме властивість завершила свій перехід (властивість propertyName), тривалість переходу (elapsedTime), та який елемент запустив подію (target).

Важливо відзначити, що якщо елемент має кілька CSS-властивостей, до яких застосовано transition, подія transitionend буде викликана для кожної з цих властивостей окремо.

Також можна перевіряти, чи перехід був скасований через користувацькі дії. Подія transitionend не буде викликана, якщо, наприклад, перехід був перерваний зміною стилів або маніпуляцією DOM.

Типовий сценарій використання transitionend — це запуск додаткових анімацій або дій після завершення основного CSS-переходу. Наприклад, можна додати клас з новими стилями або виконати асинхронний код:

box.addEventListener('transitionend', () => {
  box.classList.add('new-style');
});

Цей обробник додає новий клас до елемента після того, як завершився перехід. Це може бути корисно для покрокових анімацій або для відстеження закінчення будь-якої дії в користувацькому інтерфейсі.

Порада:

У мобільних браузерах або при динамічних змінах DOM, події переходів можуть не спрацьовувати або спрацьовувати неправильно. Рекомендується використовувати зворотні виклики (callbacks) або проміси разом з подією transitionend, щоб забезпечити надійність коду.

Порада:

Коли переходи є частиною складної анімації, подія transitionend може викликатися декілька разів через різні проміжки часу. Використовуйте таймери або логіку для відстеження того, коли всі потрібні анімації завершені.

Порада:

Важливо відзначити, що для прихованих або заборонених елементів (наприклад, через display: none) подія transitionend не спрацьовує, оскільки для таких елементів не виконується жоден перехід. Рекомендується працювати з такими елементами через інші властивості, наприклад visibility або opacity.

Синтаксис

element.addEventListener('transitionend', function(event) {
  // Дії після завершення переходу
});

Значення

Return

Переглядачі

Переглядач

66

57

11.1

53

16

Переглядач

66

66

57

11.3

Переглядач

15.0.0

1.0

Приклади


Цей код дозволяє користувачеві взаємодіяти з блоком через кнопку, яка змінює його розмір. Подія transitionend відстежує завершення зміни розміру блоку, і коли перехід завершено, з’являється повідомлення "Анімація завершена!". Це дозволяє зрозуміти, як працює transitionend для контролю завершення анімаційних переходів на сторінці.

У цьому прикладі спершу спрацьовує перехід для властивості transform, після чого запускається зміна властивості opacity. Такий підхід дозволяє реалізовувати складні анімації в кілька етапів, де кожна наступна залежить від попередньої.

const element = document.querySelector('.box');
element.addEventListener('transitionend', (event) => {
  if (event.propertyName === 'transform') {
    console.log('Трансформація завершена, запускаємо наступну анімацію.');
    element.style.opacity = '1'; // Запуск нової анімації
  }
});

Тут перша подія запускає перехід елемента по осі X, після завершення якого починається зміна прозорості. Такий ланцюжок анімацій зручно використовувати для побудови складних інтерактивних інтерфейсів.

let isAnimating = false;
const element = document.querySelector('.box');

element.addEventListener('click', () => {
  if (!isAnimating) {
    element.style.transition = 'transform 2s ease';
    element.style.transform = 'translateX(200px)';
    isAnimating = true;
  }
});

element.addEventListener('transitionend', () => {
  element.style.transition = 'opacity 1s ease';
  element.style.opacity = '0';
});