Библиотека anime.js предоставляет удобный и мощный инструмент для анимации свойств элементов DOM, включая позицию, размеры, цвет и многое другое. Перемещение объектов — одна из самых часто используемых задач, и она реализуется с помощью анимации CSS-свойств или атрибутов SVG.
Для перемещения элементов чаще всего используются свойства
translateX,
translateY и
translateZ. Эти свойства задают смещение
объекта относительно его исходного положения по осям X, Y и Z
соответственно. В anime.js они задаются в виде объекта
targets и значений анимации:
anime({
targets: '.box',
translateX: 250,
translateY: 100,
duration: 1000,
easing: 'easeInOutQuad'
});
В этом примере элемент с классом .box смещается на 250
пикселей вправо и на 100 пикселей вниз за одну секунду. Параметр
easing управляет кривой ускорения, что позволяет создавать
плавные и естественные движения.
Anime.js поддерживает относительные значения, что удобно для динамических анимаций. Например:
anime({
targets: '.box',
translateX: '+=100', // перемещение на 100 пикселей относительно текущего положения
translateY: '-=50', // перемещение вверх на 50 пикселей
duration: 800
});
Символы += и -= позволяют задавать смещение
относительно текущей позиции элемента, что удобно для последовательных
анимаций или интерактивных эффектов.
Для сложных перемещений применяются keyframes — массив объектов с параметрами движения на разных этапах анимации:
anime({
targets: '.box',
keyframes: [
{translateX: 100, translateY: 0},
{translateX: 200, translateY: 50},
{translateX: 150, translateY: 100}
],
duration: 2000,
easing: 'easeInOutSine'
});
Каждый объект внутри keyframes описывает конкретное
состояние элемента на определенном этапе анимации. Это позволяет
создавать сложные траектории движения без использования дополнительных
функций.
Для бесконечных перемещений используется свойство
loop:
anime({
targets: '.circle',
translateX: 300,
direction: 'alternate', // движение туда и обратно
loop: true,
duration: 1200,
easing: 'easeInOutCubic'
});
Здесь объект будет плавно двигаться вперед и назад по оси X, создавая эффект непрерывного движения.
Перемещение в SVG немного отличается. Вместо CSS-свойств применяются
атрибуты cx, cy, x,
y в зависимости от типа элемента:
anime({
targets: 'circle',
cx: 300,
cy: 150,
duration: 1500,
easing: 'easeOutQuad'
});
Для сложных траекторий SVG можно использовать функции
path, которые позволяют объекту двигаться вдоль заранее
заданного пути:
const path = document.querySelector('path');
anime({
targets: '.dot',
translateX: path.offsetWidth,
translateY: path.offsetHeight,
duration: 2000,
easing: 'linear'
});
Для более точного движения вдоль кривых часто используется метод
getPointAtLength у элементов <path>.
Свойство easing позволяет контролировать скорость
перемещения, создавая естественные эффекты ускорения и замедления.
Наиболее часто используются:
linear — постоянная скорость движенияeaseInQuad / easeOutQuad — ускорение или
замедлениеeaseInOutSine — плавное ускорение и замедлениеДля динамических эффектов можно использовать функции обратного вызова:
anime({
targets: '.box',
translateX: 300,
duration: 1000,
easing: 'easeInOutQuad',
update: function(anim) {
console.log(anim.progress); // отслеживание прогресса анимации
}
});
В anime.js значения можно задавать не только числами, но и функциями. Это позволяет создавать зависимые анимации:
anime({
targets: '.box',
translateX: function(el, i, t) {
return i * 50; // смещение каждого элемента на уникальное расстояние
},
duration: 1200
});
Комбинация direction: 'alternate' и loop
создаёт бесконечные колебания. Для более сложных повторов можно
использовать loop как число итераций:
anime({
targets: '.ball',
translateY: 200,
direction: 'alternate',
loop: 5,
duration: 800,
easing: 'easeInOutCubic'
});
Это движение повторится ровно пять раз, меняя направление на каждом шаге.
delay) создаёт эффект
последовательного движения.scale) или
прозрачность (opacity) для более выразительного
эффекта.Anime.js обеспечивает гибкий подход к перемещению объектов, позволяя управлять координатами, траекторией, ускорением и повторением с минимальными усилиями. Такой контроль делает библиотеку идеальной для интерактивных интерфейсов, игровых эффектов и динамичных веб-анимаций.