В библиотеке anime.js анимация свойств SVG, таких
как stroke и fill, реализуется через ключевые
параметры strokeDasharray, strokeDashoffset,
fill и CSS-подобные свойства. Это позволяет создавать
динамичные визуальные эффекты, например, эффект прорисовки линий или
плавное изменение цвета заливки.
Эффект прорисовки линии достигается сочетанием свойств strokeDasharray и strokeDashoffset:
const path = document.querySelector('path');
const length = path.getTotalLength();
path.style.strokeDasharray = length;
path.style.strokeDashoffset = length;
anime({
targets: path,
strokeDashoffset: [length, 0],
duration: 2000,
easing: 'easeInOutSine',
loop: true
});
Разбор кода:
path.getTotalLength() возвращает длину SVG-пути.strokeDasharray задаёт длину штриха и промежутков,
совпадая с длиной пути.strokeDashoffset отвечает за смещение штриха; анимация
от полной длины к нулю создаёт эффект прорисовки.easing контролирует темп анимации, loop —
её повторение.Свойство fill анимируется напрямую через CSS-значения
цвета:
anime({
targets: 'circle',
fill: ['#FF0000', '#00FF00', '#0000FF'],
duration: 3000,
easing: 'linear',
direction: 'alternate',
loop: true
});
Особенности:
direction: 'alternate' обеспечивает возврат к исходному
цвету после анимации.Для комплексных эффектов можно анимировать одновременно
stroke и fill:
anime({
targets: 'rect',
strokeDashoffset: [anime.setDashoffset, 0],
stroke: ['#000', '#FF6600'],
fill: ['#FFF', '#FFCC00'],
duration: 4000,
easing: 'easeInOutQuad',
loop: true
});
anime.setDashoffset автоматически устанавливает текущее
значение strokeDashoffset.path, rect,
circle, polygon) поддерживают такие
анимации.Для сложных сцен анимации удобно использовать timeline:
const tl = anime.timeline({
easing: 'easeInOutSine',
duration: 1000,
loop: true
});
tl.add({
targets: 'path',
strokeDashoffset: [anime.setDashoffset, 0]
})
.add({
targets: 'path',
fill: ['#FFFFFF', '#FF0000']
}, '-=500'); // старт на 500 мс раньше конца предыдущей анимации
Преимущества timeline:
'-=500' задаёт перекрытие анимаций для плавного
перехода.stroke, fill,
opacity, scale и другие CSS/SVG-свойства.Свойства stroke и fill могут задаваться
через функции для получения уникальных значений на каждом элементе:
anime({
targets: 'circle',
fill: function(el, i) {
return `hsl(${i * 60}, 80%, 50%)`;
},
strokeDashoffset: [anime.setDashoffset, 0],
duration: 2500,
loop: true
});
will-change: stroke-dashoffset, fill для ускорения
рендеринга.easeInOutSine, easeOutQuad) для создания
естественной динамики.Эти приёмы позволяют создавать интерактивные, динамичные визуальные элементы для веб-приложений, презентаций и интерфейсов с минимальными усилиями и высокой производительностью.