Anime.js предоставляет мощный инструмент для создания сложных анимаций, но не менее важно иметь контроль над их состоянием. Отслеживание состояния позволяет управлять поведением анимации, реагировать на её прогресс и взаимодействовать с пользователем в реальном времени.
Каждый объект анимации в anime.js имеет ключевые свойства состояния:
progress – текущий процент выполнения
анимации (от 0 до 100). Позволяет определить, на какой стадии находится
анимация в данный момент.currentTime – текущее время анимации в
миллисекундах. Используется для точного синхронного управления
анимацией.paused – логическое значение,
указывающее, приостановлена ли анимация.completed – логическое значение,
показывающее, завершилась ли анимация полностью.Эти свойства позволяют программно проверять состояние анимации и принимать решения о её дальнейшей работе.
Anime.js предоставляет набор методов для активного управления анимацией:
play() – запускает или возобновляет
анимацию.pause() – приостанавливает текущую
анимацию, сохраняя прогресс.restart() – сбрасывает анимацию к
началу и запускает её заново.seek(time) – перемещает анимацию к
конкретному времени в миллисекундах.reverse() – меняет направление
анимации на противоположное.Эти методы позволяют динамически изменять поведение анимации в ответ на действия пользователя или другие события в приложении.
Anime.js поддерживает несколько коллбеков, которые дают возможность реагировать на изменения состояния анимации:
begin(anim) – вызывается при запуске
анимации. Используется для выполнения действий сразу после старта.update(anim) – вызывается на каждом
кадре анимации. Позволяет синхронизировать другие элементы интерфейса с
текущим состоянием анимации, например, изменять текст, прогресс-бары или
CSS-свойства.complete(anim) – вызывается после
полного завершения анимации. Применяется для запуска последующих
анимаций или логики приложения.loopBegin(anim) /
loopComplete(anim) – вызываются при начале и
завершении цикла анимации соответственно, если она настроена на
повторение.Пример:
let animation = anime({
targets: '.box',
translateX: 300,
duration: 2000,
easing: 'easeInOutQuad',
update: function(anim) {
console.log(`Прогресс: ${anim.progress}%`);
},
complete: function(anim) {
console.log('Анимация завершена');
}
});
Иногда необходимо синхронизировать анимацию с интерфейсными
элементами, например, прогресс-барами. В таких случаях удобно
использовать anim.progress внутри коллбека
update:
let progressBar = document.querySelector('.progress-bar');
let animation = anime({
targets: '.circle',
translateX: 400,
duration: 3000,
easing: 'linear',
update: function(anim) {
progressBar.style.width = anim.progress + '%';
}
});
Это обеспечивает плавное визуальное представление состояния анимации в реальном времени.
Анимации можно интегрировать с событиями пользовательского ввода:
let animation = anime({
targets: '.square',
translateY: 200,
duration: 2500,
autoplay: false
});
document.querySelector('.start-btn').addEventListener('click', () => animation.play());
document.querySelector('.pause-btn').addEventListener('click', () => animation.pause());
document.querySelector('.reverse-btn').addEventListener('click', () => animation.reverse());
Такое управление позволяет создавать интерактивные интерфейсы, где анимации полностью подчиняются действиям пользователя.
Anime.js поддерживает отслеживание состояния даже в сложных случаях, например, при последовательных или параллельных анимациях:
anime.timeline({
targets: '.item',
easing: 'easeOutExpo',
duration: 1000,
loop: false,
update: function(anim) {
console.log(`Timeline прогресс: ${anim.progress}%`);
}
})
.add({ translateX: 250 })
.add({ rotate: 180 }, '-=500') // параллельная анимация
Использование timeline позволяет объединять несколько анимаций и отслеживать их общий прогресс, что критично для сложных интерфейсных эффектов.
progress,
currentTime, paused и
completed.play(),
pause(), restart(), seek() и
reverse().begin, update,
complete и циклических
loopBegin/loopComplete для реагирования на
события анимации.update.Эти инструменты создают полный контроль над поведением анимаций, обеспечивая гибкость и предсказуемость их работы в любом проекте на anime.js.