В библиотеке anime.js анимации создаются через
функцию anime(). При вызове она возвращает объект-анимацию,
который предоставляет методы управления процессом
анимации. Такой экземпляр позволяет гибко управлять
воспроизведением, изменять параметры на лету и реагировать на
события.
const animation = anime({
targets: '.box',
translateX: 250,
duration: 2000,
loop: true
});
В данном примере переменная animation хранит экземпляр
анимации, с помощью которого можно вызывать методы управления.
Запускает анимацию или продолжает её после паузы.
animation.play();
Если анимация уже идет, вызов метода не приведёт к сбросу текущего состояния.
Приостанавливает воспроизведение анимации в текущем состоянии.
animation.pause();
Метод полезен для управления анимацией на основе пользовательских событий, например при наведении курсора.
Перезапускает анимацию с начала, сбрасывая текущее состояние и прогресс.
animation.restart();
Меняет направление анимации на противоположное. Если анимация шла вперёд, после вызова будет идти назад.
animation.reverse();
animation.play();
Важно помнить, что метод reverse() только меняет
направление, но не запускает анимацию — для старта нужно
вызвать play().
Позволяет перейти к конкретной позиции анимации в миллисекундах.
animation.seek(1000); // Перемещает прогресс анимации на 1 секунду
Это особенно удобно для синхронизации нескольких анимаций или управления прогрессом вручную.
Комбинируя pause() и seek(), можно
полностью управлять кадрами анимации:
animation.pause();
animation.seek(1500); // Останавливаем анимацию на 1.5 секунде
Использование reverse() позволяет создавать
отзывчивые анимации, которые реагируют на действия
пользователя, например анимация кнопки при наведении и уходе
курсора.
Метод update() позволяет изменять свойства анимации во
время её исполнения.
animation.update = function(anim) {
console.log(anim.progress); // вывод прогресса анимации
};
Здесь функция будет вызываться на каждом кадре, предоставляя доступ к актуальному состоянию анимации.
Свойство finished возвращает промис,
который разрешается после завершения анимации.
animation.finished.then(() => {
console.log('Анимация завершена');
});
Использование промисов удобно для последовательного выполнения анимаций.
Можно динамически менять targets и другие свойства, создавая более сложные сценарии:
animation.restart();
animation.animatables.forEach(item => {
item.target.style.backgroundColor = 'red';
});
Методы экземпляра позволяют синхронизировать несколько анимаций:
const anim1 = anime({ targets: '.box1', translateX: 300, duration: 1000 });
const anim2 = anime({ targets: '.box2', translateX: 300, duration: 1000, autoplay: false });
anim1.finished.then(() => anim2.play());
Использование finished обеспечивает точное
последовательное воспроизведение.
Экземпляры позволяют комбинировать зацикливание и направление:
const anim = anime({
targets: '.circle',
translateY: 200,
duration: 1500,
loop: true,
direction: 'alternate'
});
true
для бесконечного циклаЭкземпляр анимации сохраняет текущее состояние, позволяя динамически
управлять циклом и направлением через reverse() и
seek().
Для сложных сценариев часто комбинируются:
animation.pause();
animation.finished.then(() => console.log('Завершение после паузы'));
Такой подход обеспечивает контроль над логикой после завершения, даже если анимация была временно приостановлена.
Метод remove() позволяет удалить анимацию и отменить все
связанные события.
animation.remove();
Это освобождает ресурсы и предотвращает дальнейшее выполнение.
Методы экземпляра анимации в anime.js дают полный контроль над прогрессом, направлением, циклом и динамическими изменениями свойств, позволяя создавать сложные, отзывчивые и синхронизированные эффекты на странице.