Библиотека anime.js позволяет создавать плавные
анимации любых числовых свойств объектов JavaScript. К числовым
свойствам относятся как стандартные CSS-свойства (ширина, высота,
прозрачность), так и произвольные свойства объектов. Анимация
производится с использованием ключевых параметров: targets,
properties, duration, easing.
Простейший пример анимации числового свойства объекта:
const obj = { x: 0 };
anime({
targets: obj,
x: 250,
duration: 1000,
easing: 'linear',
update: () => {
console.log(obj.x);
}
});
В этом примере свойство x объекта obj
плавно изменяется от 0 до 250 за одну секунду. Функция
update вызывается на каждом кадре, что позволяет
отслеживать текущие значения свойства.
Параметр easing управляет кривой изменения значения во
времени. Anime.js поддерживает множество предустановленных
вариантов:
'linear' – равномерное изменение.'easeInQuad', 'easeOutQuad',
'easeInOutQuad' – квадратичные ускорения и замедления.'easeInElastic', 'easeOutBounce' –
физически приближенные эффекты с пружинами и отскоками.Пример с использованием кривой ускорения:
const obj = { y: 0 };
anime({
targets: obj,
y: 300,
duration: 1500,
easing: 'easeInOutQuad',
update: () => console.log(obj.y)
});
Использование разных easing существенно влияет на
восприятие анимации и позволяет создавать более «живые» движения.
Anime.js позволяет одновременно анимировать несколько числовых свойств объекта. Для этого в объект анимации передаются все свойства, которые необходимо изменять:
const obj = { x: 0, y: 0, opacity: 0 };
anime({
targets: obj,
x: 200,
y: 100,
opacity: 1,
duration: 2000,
easing: 'easeOutQuad',
update: () => console.log(obj)
});
Каждое свойство анимируется независимо, но синхронно по времени.
Свойства можно задавать не только константами, но и функциями, которые вычисляют конечное значение на основе текущего состояния, индекса элемента или случайного числа:
const obj = { value: 0 };
anime({
targets: obj,
value: () => Math.random() * 500,
duration: 1000,
easing: 'easeInOutSine',
update: () => console.log(obj.value)
});
Функция вызывается при старте анимации, что позволяет создавать непредсказуемые и динамичные эффекты.
Свойства можно анимировать циклично с помощью параметров
loop и direction:
const obj = { x: 0 };
anime({
targets: obj,
x: 300,
duration: 1000,
direction: 'alternate',
loop: true,
easing: 'easeInOutQuad'
});
direction: 'alternate' – после достижения конечного
значения анимация возвращается к исходному.loop: true – анимация повторяется бесконечно, либо
можно задать число повторов.Не обязательно использовать DOM-элементы. Любой JavaScript-объект с числовыми свойствами подходит для анимации. Это удобно для управления состояниями игры, визуализаций или данных:
const particle = { radius: 10, speed: 5 };
anime({
targets: particle,
radius: 50,
speed: 20,
duration: 1200,
easing: 'easeOutElastic',
update: () => console.log(particle)
});
Параметры radius и speed изменяются
одновременно, создавая комплексную анимацию объекта.
Метод update позволяет выполнять действия на каждом
кадре анимации, синхронизируя визуализацию с изменением числовых
свойств:
const obj = { progress: 0 };
anime({
targets: obj,
progress: 100,
duration: 2000,
easing: 'linear',
update: () => renderProgress(obj.progress)
});
function renderProgress(value) {
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.fillRect(0, 0, value * 2, 50);
}
Функция renderProgress визуально отображает текущее
значение свойства progress на холсте.
Anime.js поддерживает анимацию с ключевыми значениями, что позволяет задавать несколько этапов изменения свойства:
const obj = { x: 0 };
anime({
targets: obj,
keyframes: [
{ x: 100 },
{ x: 50 },
{ x: 200 }
],
duration: 2000,
easing: 'easeInOutSine',
update: () => console.log(obj.x)
});
Каждый ключевой кадр задает промежуточное состояние, а библиотека плавно интерполирует значения между ними.
Anime.js предоставляет методы для управления анимацией после её запуска:
play() – запуск или возобновление анимации.pause() – остановка.restart() – перезапуск с начала.seek(ms) – переход к определённой позиции в
миллисекундах.reverse() – инвертирование направления.const anim = anime({
targets: obj,
x: 400,
duration: 1500,
easing: 'easeInOutQuad'
});
anim.pause();
setTimeout(() => anim.play(), 1000);
Anime.js автоматически интерполирует числовые значения с высокой
точностью. Для сложных случаев можно использовать update
для ручного контроля, комбинируя анимацию нескольких объектов и свойств
в единую сцену.
Targets может быть массивом объектов:
const particles = [
{ x: 0 },
{ x: 50 },
{ x: 100 }
];
anime({
targets: particles,
x: 200,
duration: 1200,
delay: anime.stagger(100),
easing: 'easeOutQuad'
});
anime.stagger(100) позволяет создать эффект волны или
последовательного старта анимаций.Анимация числовых свойств объектов в anime.js предоставляет гибкий инструмент для создания динамических интерфейсов и визуализаций. Поддержка функций для вычисления значений, ключевых кадров, циклов и синхронизации с кадрами делает библиотеку универсальной для работы с любыми объектами, не ограничиваясь DOM-элементами. Понимание основ и методов управления позволяет создавать как простые, так и сложные анимационные сцены.