Привет, ребята! У меня возникла проблема с CSS-анимацией и JavaScript. Я использую -webkit-transform: translateX для плавного перемещения div’а слева направо. Всё работает отлично, но мне нужно выполнить действие после завершения анимации.
Сейчас я использую setTimeout в JavaScript, который срабатывает через 1 мс после окончания анимации. В 99% случаев всё ок, но иногда возникают сбои из-за неточного таймера.
Я слышал про событие webkitTransitionEnd, но не могу заставить его работать. Вот мой CSS:
Анимация запускается добавлением класса .slide-in по клику на кнопку. Как лучше синхронизировать JavaScript с окончанием CSS-анимации? Может, есть способ получше? Важно сохранить CSS-анимацию для производительности на iOS.
Этот подход работает во всех современных браузерах и дает больше возможностей для управления анимацией. Плюс, не нужно менять CSS-классы - всё управляется из JS.
я сталкивался с похожей проблемой и нашел решение через событие transitionend. оно срабатывает надежнее чем setTimeout. вот как можно использовать:
const element = document.querySelector('.slide-element');
element.addEventListener('transitionend', () => {
// тут выполняем нужное действие
});
это будет работать для всех браузеров, не только webkit. главное убедиться что transition определен в css. еще совет - можно добавить проверку на свойство, по которому идет анимация:
if (e.propertyName === 'transform') {
// действие
}
так callback сработает только когда закончится нужная анимация, если их несколько. надеюсь это поможет!