Библиотека anime.js предоставляет широкие возможности для создания динамических анимаций в браузере. Важной частью работы с анимациями является отслеживание их состояния, что особенно полезно при сложных последовательностях или интерактивных интерфейсах. Логирование состояния позволяет понять, в какой момент анимация находится, выявить ошибки и оптимизировать производительность.
В anime.js каждая анимация создаётся с помощью
функции anime() и возвращает объект анимации, который можно
использовать для логирования. Основные методы отслеживания:
update Позволяет выполнять функцию
на каждом кадре анимации. Это основной способ логировать текущее
состояние анимации в реальном времени.
Пример использования:
const animation = anime({
targets: '.box',
translateX: 250,
duration: 2000,
update: function(anim) {
console.log(`Текущая позиция: ${anim.animations[0].currentValue}`);
console.log(`Прогресс: ${anim.progress}%`);
}
});
Здесь anim.animations[0].currentValue возвращает текущее
значение свойства, а anim.progress — общий процент
завершения анимации.
begin и complete
События begin и complete логируют старт и
окончание анимации соответственно. Это удобно для регистрации событий и
триггеров:
const animation = anime({
targets: '.circle',
scale: 2,
duration: 1500,
begin: function() { console.log('Анимация началась'); },
complete: function() { console.log('Анимация завершена'); }
});loop и direction При
циклических анимациях можно логировать количество повторов и направление
движения:
const animation = anime({
targets: '.line',
translateX: 300,
direction: 'alternate',
loop: 3,
update: function(anim) {
console.log(`Текущий цикл: ${Math.floor(anim.currentTime / anim.duration) + 1}`);
console.log(`Направление: ${anim.direction}`);
}
});anime.js предоставляет удобные свойства для детального анализа:
anim.currentTime — текущее время анимации в
миллисекундах.anim.progress — процент завершения (0–100).anim.completed — булево значение, показывает, завершена
ли анимация.anim.reversed — булево значение, показывает, идет ли
анимация в обратном направлении.Пример комбинированного логирования:
const animation = anime({
targets: '.square',
rotate: '1turn',
duration: 3000,
update: function(anim) {
console.log(`Время: ${anim.currentTime} мс`);
console.log(`Прогресс: ${anim.progress.toFixed(2)}%`);
console.log(`Завершена: ${anim.completed}`);
}
});
Можно создавать вспомогательные функции для централизованного логирования нескольких анимаций. Это особенно важно при комплексных интерфейсах с множеством элементов:
function logState(anim, name) {
console.log(`[${name}] Прогресс: ${anim.progress.toFixed(2)}%, Время: ${anim.currentTime} мс`);
}
const anim1 = anime({
targets: '.box1',
translateX: 200,
duration: 2000,
update: function(anim) { logState(anim, 'box1'); }
});
const anim2 = anime({
targets: '.box2',
translateY: 150,
duration: 3000,
update: function(anim) { logState(anim, 'box2'); }
});
При использовании timeline можно логировать состояние всей последовательности, включая отдельные анимации:
const tl = anime.timeline({
easing: 'easeOutExpo',
duration: 1000,
update: function(anim) {
console.log(`Общий прогресс timeline: ${anim.progress.toFixed(2)}%`);
}
});
tl.add({ targets: '.circle', translateX: 100 })
.add({ targets: '.circle', translateY: 50 })
.add({ targets: '.circle', scale: 2 });
Свойство anim.progress в timeline.update
отражает прогресс всей последовательности, а не
отдельной анимации.
anim.animations, который хранит массив анимаций с текущими
значениями и целевыми значениями.Логирование состояния в anime.js является мощным инструментом для отладки и оптимизации анимаций, позволяя получать детальные сведения о прогрессе, времени, направлении и завершении каждой анимации.