Anime.js предоставляет мощный инструмент для
создания динамических анимаций градиентов и паттернов на элементах HTML
и SVG. Работа с цветами и сложными визуальными эффектами в anime.js
основывается на плавной интерполяции свойств CSS и атрибутов SVG.
Основная концепция заключается в том, что любые числовые или цветовые
значения можно анимировать через объект targets, задавая
начальные и конечные состояния, а также временные функции перехода.
Градиенты в CSS (линейные и радиальные) часто задаются через свойство
background-image. Для их анимации anime.js не умеет
напрямую изменять сложные строки вида linear-gradient(...),
поэтому обычно используют разделение на отдельные цветовые
остановки:
anime({
targets: {color1: '#ff0000', color2: '#0000ff'},
color1: '#00ff00',
color2: '#ff00ff',
round: 1,
easing: 'linear',
duration: 3000,
update: function(anim) {
document.querySelector('.gradient-box').style.background =
`linear-gradient(90deg, ${anim.animations[0].currentValue}, ${anim.animations[1].currentValue})`;
}
});
Ключевые моменты:
targets.update используется для применения текущих значений к
CSS.round: 1 округляет значения для корректного отображения
RGB-цветов, если используются числовые форматы.Для SVG паттернов и градиентов применяется аналогичный принцип:
изменение атрибутов stop-color, x1,
y1, x2, y2 и других свойств
градиента.
anime({
targets: '#myGradient stop',
stopColor: [
{ value: '#ff0000', duration: 2000 },
{ value: '#0000ff', duration: 2000 }
],
easing: 'easeInOutQuad',
loop: true
});
Особенности работы с SVG:
stop элементы градиента могут анимироваться
отдельно.loop: true.Для сложных градиентов с более чем двумя остановками удобно
использовать массивы цветов и функцию update, чтобы каждая
остановка плавно смещала свой цвет.
const colors = ['#ff0000','#00ff00','#0000ff','#ffff00'];
anime({
targets: {step: 0},
step: colors.length - 1,
easing: 'linear',
duration: 4000,
loop: true,
update: function(anim) {
let gradient = colors.map((c, i) => {
let index = Math.floor((i + anim.animations[0].currentValue) % colors.length);
return colors[index];
});
document.querySelector('.multi-gradient').style.background =
`linear-gradient(90deg, ${gradient.join(',')})`;
}
});
Важные аспекты:
rgba) открывает
возможности для создания сложных визуальных эффектов свечения и
наложений.Помимо градиентов, anime.js может анимировать свойства паттернов,
такие как patternTransform или patternUnits в
SVG:
anime({
targets: '#patternRect',
translateX: 200,
translateY: 100,
rotate: 360,
easing: 'easeInOutSine',
duration: 5000,
loop: true
});
Применение:
requestAnimationFrame через
anime.js: anime.js автоматически синхронизирует анимации с
перерисовкой браузера.canvas для сложных градиентных эффектов.easeInOutQuad, easeInOutSine и
linear.Anime.js позволяет создавать гибкие и динамичные анимации как для
CSS, так и для SVG. Основная техника заключается в разделении сложных
свойств на анимируемые числовые или цветовые компоненты, использовании
метода update для применения текущих значений и
комбинировании циклических и плавных функций для достижения эффекта
движения и переходов.
Сочетание анимации цвета, смещения и трансформаций паттернов открывает практически безграничные возможности для интерактивных интерфейсов и визуальных эффектов.