Библиотека anime.js предоставляет мощный инструмент для создания плавных и гибких анимаций CSS-свойств в JavaScript. Она позволяет управлять трансформациями, цветами, прозрачностью, размерами элементов и другими свойствами через единый API.
Простейший пример анимации CSS-свойства выглядит так:
anime({
targets: '.box',
translateX: 250,
duration: 1000,
easing: 'easeInOutQuad'
});
Здесь targets указывает на элементы DOM, которые будут анимироваться, translateX — свойство трансформации, duration — длительность анимации в миллисекундах, а easing — функция временной кривой, определяющая динамику движения.
Anime.js поддерживает анимацию большинства CSS-свойств, включая:
translateX,
translateY, scale, rotate.backgroundColor,
borderColor, color.width, height,
padding, margin.opacity.top,
left, right, bottom.Для цветовых свойств можно использовать форматы HEX, RGB и HSL:
anime({
targets: '.text',
color: '#ff0000',
backgroundColor: 'rgb(0,255,0)',
duration: 1500,
easing: 'linear'
});
Для сложных эффектов можно анимировать несколько свойств одновременно. Anime.js позволяет передавать объект с набором свойств:
anime({
targets: '.card',
translateX: 100,
scale: 1.5,
rotate: '45deg',
backgroundColor: '#3498db',
duration: 2000,
easing: 'easeOutElastic(1, .8)'
});
Каждое свойство может иметь свои параметры duration и delay, используя массив объектов:
anime({
targets: '.circle',
translateX: [
{ value: 250, duration: 1000 },
{ value: 0, duration: 1000 }
],
opacity: [
{ value: 0, duration: 500 },
{ value: 1, duration: 500 }
],
easing: 'easeInOutSine'
});
Для плавной динамики можно применять относительные значения
+= и -=:
anime({
targets: '.box',
translateX: '+=200',
translateY: '-=100',
duration: 1500,
easing: 'easeInOutCubic'
});
Относительные значения позволяют анимировать элемент относительно его текущей позиции без необходимости вычислять точные координаты заранее.
Anime.js предлагает множество easing-функций, которые определяют скорость и характер движения. Наиболее используемые:
linear — равномерная скорость;easeInQuad — ускорение;easeOutQuad — замедление;easeInOutQuad — ускорение с последующим
замедлением;easeOutElastic — эффект упругости;easeInOutBounce — эффект «отскока».Easing можно задавать строкой или функцией, что позволяет создавать кастомные кривые.
Для создания цепочек анимаций применяются delay и stagger:
anime({
targets: '.item',
translateY: 50,
opacity: 1,
delay: anime.stagger(200), // элементы анимируются с шагом 200мс
duration: 1000,
easing: 'easeOutExpo'
});
Stagger позволяет создавать волнообразные эффекты, когда элементы появляются один за другим.
Для динамических эффектов можно использовать callbacks:
begin — вызывается при старте анимации;update — вызывается на каждом кадре анимации;complete — вызывается после завершения анимации.anime({
targets: '.ball',
translateX: 300,
duration: 1500,
easing: 'easeInOutQuad',
update: function(anim) {
console.log(anim.progress + '%');
},
complete: function() {
console.log('Анимация завершена');
}
});
Для сложных движений можно использовать keyframes, позволяя задавать последовательность изменений свойств:
anime({
targets: '.square',
keyframes: [
{ translateX: 100, rotate: '10deg' },
{ translateX: 200, rotate: '-10deg' },
{ translateX: 0, rotate: '0deg' }
],
duration: 3000,
easing: 'easeInOutSine'
});
Каждый объект в массиве keyframes описывает набор CSS-свойств и их значения в определённый момент анимации.
Anime.js поддерживает повторение анимаций с помощью loop и direction:
anime({
targets: '.spinner',
rotate: 360,
duration: 2000,
easing: 'linear',
loop: true,
direction: 'alternate' // чередование направления
});
Loop может быть числовым (например, loop: 3) или
бесконечным (loop: true), что удобно для загрузочных
индикаторов и фоновых анимаций.
Anime.js может работать с CSS-переменными, что позволяет создавать адаптивные анимации:
anime({
targets: document.documentElement,
'--main-color': '#e74c3c',
duration: 1000,
easing: 'easeInOutQuad'
});
Это полезно для динамического изменения темы или цветовых схем без изменения каждого элемента вручную.