В SVG.js путь определяется с помощью объекта SVG.Path.
Путь строится из последовательности команд, таких как M
(move), L (line), C (cubic Bézier),
Q (quadratic Bézier), Z (close path). Основная
структура:
const draw = SVG().addTo('body').size(600, 400);
const path = draw.path('M50 50 L150 50 L150 150 L50 150 Z')
.fill('none')
.stroke({ width: 2, color: '#000' });
Ключевые моменты:
fill('none') делает путь прозрачным внутри.stroke({ width, color }) задает толщину и цвет
линии.M указывает начальную точку, L — линии к
следующим точкам.Анимация пути в SVG.js реализуется через метод
animate(), который можно применять к объекту
path. Основные параметры анимации:
duration) в
миллисекундах.delay) перед запуском.ease) для
плавного перехода.Пример плавного изменения формы:
path.animate(2000, '<>').plot('M50 50 C100 0 200 100 150 150 Z');
plot() принимает строку с новой
последовательностью команд.<> указывает на ease-in-out, плавное
ускорение и замедление.Важно: количество команд и точек в старом и новом пути должно быть сопоставимо для корректного морфинга. Несоответствие приводит к резким скачкам формы.
Морфинг позволяет плавно превращать одну форму в другую. Для сложных фигур используется:
animate().plot() для изменения
пути.const path1 = draw.path('M10 80 C 40 10, 65 10, 95 80 S 150 150, 180 80')
.fill('none')
.stroke({ color: '#f06', width: 3 });
const path2 = 'M10 80 C 40 50, 65 50, 95 80 S 150 10, 180 80';
path1.animate(3000, '<>').plot(path2);
Советы по морфингу:
SVG.js позволяет создавать бесконечные или циклические анимации:
path.animate(2000, '<>')
.plot('M10 80 C 40 50, 65 50, 95 80 S 150 10, 180 80')
.loop();
loop() запускает повторение анимации
бесконечно.true/false для направления
чередования (alternate):path.animate(2000, '<>')
.plot('M10 80 C 40 50, 65 50, 95 80 S 150 10, 180 80')
.loop(true, true);
true — повторение.true — реверс при каждом цикле.Пути можно анимировать одновременно с другими объектами, например, изменять цвет линии и форму:
path.animate(2500, '<>')
.plot('M10 80 C 40 50, 65 50, 95 80 S 150 10, 180 80')
.stroke({ color: '#0f6', width: 5 });
Метод stroke() в анимации позволяет плавно изменять цвет
и толщину линии вместе с морфингом.
При необходимости согласовать несколько объектов для одновременного изменения формы и положения можно использовать промисы:
Promise.all([
path1.animate(2000, '<>').plot(path2).finished,
path2.animate(2000, '<>').plot(path3).finished
]).then(() => console.log('Анимация завершена'));
finished возвращает промис, который
завершается после окончания анимации.Для более детального контроля точек пути используется
pathArray:
let arr = path.array(); // Получение массива сегментов
arr[1][1] += 20; // Смещение первой контрольной точки
path.animate(1000).plot(arr);
['C', x1, y1, x2, y2, x, y].requestAnimationFrame
через SVG.js при сложных интерактивных анимациях для плавности.Морфинг путей в SVG.js сочетает гибкость и мощность: правильное
использование animate(), plot(),
pathArray и синхронизация нескольких анимаций позволяет
создавать динамичные и плавные графические эффекты, от простых линий до
сложных фигур с трансформацией.