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');
});

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

автор: Bond

Порада

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

автор: Bond
Порада

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

автор: Bond
Порада

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

автор: Bond

Синтаксис

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

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
26 51 7 12.1 18 10*
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 26 51 7

Приклади

+ запропонувати свій приклад у пісочниці

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

HTML

<div class="box">перший елемент box</div>
<div class="box">другий елемент box</div>

JS

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';
});
автор: Bond

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

HTML

<div class="box">перший елемент box</div>
<div class="box">другий елемент box</div>

JS

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

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

автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід