В библиотеке anime.js анимация добавления и удаления классов реализуется через комбинацию CSS-селекторов и анимационных свойств. Основная идея заключается в том, что вместо прямого изменения стилей элемента, можно манипулировать классами, а anime.js плавно интерполирует свойства, связанные с этими классами.
Ключевой подход — использование классов, содержащих конечные
состояния анимации. Например, создаются классы
.active, .hidden, .highlight,
которые задают определённые CSS-свойства:
.box {
width: 100px;
height: 100px;
background-color: blue;
opacity: 1;
transition: all 0.5s ease;
}
.box.active {
transform: scale(1.5);
background-color: red;
opacity: 0.5;
}
Anime.js позволяет анимировать эти изменения без ручного расчёта промежуточных состояний: библиотека автоматически создаёт плавный переход от текущих значений CSS к значениям, заданным новым классом.
Для добавления класса с анимацией используется метод
anime() с указанием свойства, соответствующего конечным
значениям класса. Прямого метода addClass в anime.js нет,
но можно реализовать аналог через последовательность действий:
const element = document.querySelector('.box');
element.classList.add('active');
anime({
targets: element,
scale: 1.5,
backgroundColor: '#ff0000',
opacity: 0.5,
duration: 800,
easing: 'easeInOutQuad'
});
Ключевые моменты:
targets указывает на элементы, к которым применяется
анимация.scale, backgroundColor,
opacity должны соответствовать стилям класса
.active.duration и easing задают время и кривую
плавности анимации.Этот подход позволяет синхронизировать CSS-класс с JavaScript-анимацией, что даёт гибкость и управляемость.
Удаление класса требует обратного процесса: сначала анимируются свойства текущего класса, затем класс удаляется. Это предотвращает резкий визуальный “скачок”.
anime({
targets: element,
scale: 1,
backgroundColor: '#0000ff',
opacity: 1,
duration: 600,
easing: 'easeOutQuad',
complete: () => {
element.classList.remove('active');
}
});
Особенности реализации:
complete — коллбэк, который срабатывает после
завершения анимации.Anime.js позволяет создавать цепочки анимаций через
timeline, что идеально подходит для последовательного
добавления и удаления классов:
const tl = anime.timeline({
easing: 'easeInOutQuad',
duration: 500
});
tl
.add({
targets: element,
scale: 1.5,
backgroundColor: '#ff0000',
opacity: 0.5,
begin: () => element.classList.add('active')
})
.add({
targets: element,
scale: 1,
backgroundColor: '#0000ff',
opacity: 1,
complete: () => element.classList.remove('active')
});
Преимущества timeline:
Для повышения удобства можно считывать текущие стили элемента и вычислять конечные значения автоматически:
const styles = getComputedStyle(element);
anime({
targets: element,
scale: styles.transform === 'none' ? 1 : 1.5,
backgroundColor: styles.backgroundColor,
opacity: parseFloat(styles.opacity),
duration: 700,
easing: 'easeInOutCubic'
});
Такой подход уменьшает дублирование значений CSS и обеспечивает согласованность между стилями и анимацией.
begin и
complete для синхронизации с DOM-операциями.getComputedStyle для более гибкой анимации.timeline и коллбэков для
последовательного добавления и удаления классов.Этот подход обеспечивает чистый и управляемый способ анимации классов, объединяя возможности CSS и JavaScript-анимаций с высокой производительностью и плавностью.