В anime.js можно анимировать не только DOM-элементы, но и любые JavaScript-объекты. Это позволяет управлять сложными данными и создавать динамические визуализации, графики или игры, где анимация влияет на логику приложения, а не только на интерфейс.
Для начала необходимо определить объект с нужными свойствами:
const point = { x: 0, y: 0 };
Анимация выполняется с помощью функции anime(), где в
параметрах задаются target, свойства для
анимации, длительность и
тайминги:
anime({
targets: point,
x: 250,
y: 150,
duration: 1000,
easing: 'easeInOutQuad',
update: function() {
console.log(`Текущие координаты: x=${point.x}, y=${point.y}`);
}
});
Ключевые моменты:
targets может быть объектом или массивом объектов.x, y).update позволяет отслеживать промежуточные
значения и выполнять действия в реальном времени.Для анимации коллекции объектов применяется массив в
targets:
const points = [
{ x: 0, y: 0 },
{ x: 50, y: 100 },
{ x: 100, y: 50 }
];
anime({
targets: points,
x: anime.stagger(50), // увеличиваем x на 50 для каждого объекта
y: anime.stagger(50, { start: 0 }), // индивидуальная задержка
duration: 800,
easing: 'easeOutElastic'
});
Особенности работы с массивами объектов:
anime.stagger() позволяет создавать последовательные
смещения или задержки.anime.js поддерживает анимацию вложенных свойств объектов, используя строковую нотацию через точку:
const rectangle = {
position: { x: 0, y: 0 },
size: { width: 100, height: 50 }
};
anime({
targets: rectangle,
'position.x': 300,
'position.y': 200,
'size.width': 200,
'size.height': 100,
duration: 1200,
easing: 'easeInOutSine'
});
Особенности:
targets.Значения свойств можно задавать функциями, чтобы анимация зависела от исходного состояния или индекса объекта:
const balls = [
{ radius: 10 },
{ radius: 15 },
{ radius: 20 }
];
anime({
targets: balls,
radius: function(el, i) {
return el.radius * (i + 1); // увеличиваем радиус для каждого элемента
},
duration: 1000,
easing: 'easeOutBounce'
});
Преимущества динамических функций:
anime.js предоставляет полный контроль над анимацией через методы анимационного объекта:
const animation = anime({
targets: point,
x: 400,
y: 300,
duration: 1500,
easing: 'easeInOutCubic'
});
animation.pause(); // приостанавливает анимацию
animation.play(); // возобновляет
animation.reverse(); // меняет направление
animation.seek(500); // перемещает анимацию на 500 мс
Полезные методы:
pause() и play() — управление
воспроизведением.reverse() — позволяет использовать анимацию как
циклическую смену состояний.seek(time) — позволяет “перемотать” анимацию на любое
время.Чаще всего пользовательские объекты применяются в связке с канвасом или SVG:
const canvas = document.querySelector('canvas');
const ctx = canvas.getContext('2d');
const circle = { x: 50, y: 50, radius: 20 };
anime({
targets: circle,
x: 300,
y: 200,
radius: 50,
duration: 2000,
easing: 'easeInOutQuad',
update: () => {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.beginPath();
ctx.arc(circle.x, circle.y, circle.radius, 0, Math.PI * 2);
ctx.fill();
}
});
Особенности интеграции:
update позволяет синхронизировать визуализацию с
анимацией объекта.anime() с targets на объект
или массив объектов.stagger для динамических
значений и последовательностей.update, begin,
complete для интеграции с визуализацией.pause(),
play(), reverse(), seek().Такой подход делает anime.js мощным инструментом для анимации логики приложения и визуальных эффектов за пределами стандартного DOM.