Anime.js предоставляет мощный механизм хуков, позволяющий управлять анимацией на каждом этапе её выполнения. Хуки — это функции обратного вызова, которые вызываются в определённые моменты жизненного цикла анимации. Они дают возможность отслеживать прогресс, реагировать на события и создавать сложные динамические эффекты.
В anime.js основные хуки делятся на четыре категории:
begin и
completebegin вызывается один раз в момент
старта анимации. Это идеальное место для инициализации состояния,
логирования или запуска сопутствующих эффектов.
anime({
targets: '.box',
translateX: 250,
duration: 1000,
begin: function(anim) {
console.log('Анимация началась', anim);
}
});
complete срабатывает после полного
завершения анимации, включая все циклы повторов и задержки.
anime({
targets: '.box',
translateX: 250,
duration: 1000,
complete: function(anim) {
console.log('Анимация завершена', anim);
}
});
Ключевое преимущество этих хуков — управление логикой на старте и конце анимации без необходимости постоянной проверки состояния.
update —
отслеживание прогрессаХук update вызывается на каждом кадре
анимации. Функция получает объект анимации, из которого можно извлекать
прогресс и текущие значения свойств.
anime({
targets: '.box',
translateX: 250,
duration: 2000,
update: function(anim) {
console.log('Процент выполнения:', anim.progress);
}
});
Особенности использования:
requestAnimationFrame.changeBegin и
changeCompleteЭти хуки срабатывают при изменении каждого свойства, а не всей анимации целиком:
changeBegin — перед началом изменения
конкретного свойства.changeComplete — после завершения
изменения конкретного свойства.Пример:
anime({
targets: '.box',
translateX: [0, 250],
scale: [1, 1.5],
duration: 1500,
changeBegin: function(anim) {
console.log('Начало изменения свойства', anim.animatables[0].target);
},
changeComplete: function(anim) {
console.log('Свойство изменено', anim.animatables[0].target);
}
});
Эти хуки полезны для создания каскадных или сложных последовательных эффектов, где важно контролировать каждый шаг изменения.
loopBegin и
loopCompleteАнимации с циклическим повтором (loop) позволяют
повторять движение несколько раз. Хуки для циклов:
loopBegin — вызывается в начале
каждого цикла.loopComplete — вызывается после
завершения каждого цикла.Пример с бесконечным циклом:
anime({
targets: '.box',
rotate: 360,
duration: 1000,
loop: true,
loopBegin: function(anim) {
console.log('Начало цикла', anim.currentLoop);
},
loopComplete: function(anim) {
console.log('Цикл завершен', anim.currentLoop);
}
});
Эти хуки позволяют динамически изменять параметры при каждом повторе, например, увеличивать скорость или менять цвет.
change
— наблюдение за отдельными анимируемыми элементамиКаждый объект, анимируемый в anime.js, представлен как
animatable. Хук
change вызывается при изменении каждого
такого объекта на каждом кадре. Это расширение update, но с
фокусом на отдельные элементы.
anime({
targets: ['.box1', '.box2'],
translateX: 300,
duration: 2000,
change: function(anim) {
anim.animatables.forEach(item => {
console.log(item.target, item.currentValue);
});
}
});
Используется для:
Оптимизация update и
change Частые вычисления внутри этих хуков могут
снизить FPS. Лучше ограничивать операции тяжелыми вычислениями или
применять requestAnimationFrame.
Комбинирование хуков Часто одновременно
используются begin, update и
complete для полного контроля над анимацией.
Взаимодействие с DOM Через хуки удобно управлять классами, атрибутами и inline-стилями элементов, синхронизируя с анимацией.
Динамическая настройка Хуки позволяют менять параметры анимации «на лету», например, увеличивать скорость при каждом цикле или менять направление движения.
| Хук | Событие | Частота вызова |
|---|---|---|
begin |
Начало анимации | 1 раз |
complete |
Завершение анимации | 1 раз |
update |
Каждый кадр анимации | На каждом шаге |
changeBegin |
Перед изменением свойства | На каждом изменении |
changeComplete |
После изменения свойства | На каждом изменении |
loopBegin |
Начало цикла | На каждом цикле |
loopComplete |
Завершение цикла | На каждом цикле |
change |
Изменение отдельного анимируемого элемента | На каждом кадре каждого элемента |
Хуки в anime.js предоставляют полный контроль над жизненным циклом анимации, позволяют синхронизировать действия с каждым кадром и создавать высоко интерактивные эффекты без сложной ручной логики. Их грамотное использование повышает гибкость и производительность анимационных решений в JavaScript.