В SVG.js путь представляется объектом SVG.Path, который
позволяет создавать, изменять и анимировать линии и кривые в формате
SVG. Путь состоит из сегментов, каждый из которых описывается командами
движения (M, L, C,
Q, A, Z) и координатами.
Методы для работы с путями позволяют:
Добавлять сегменты Метод plot()
принимает строку с командами SVG Path или массив объектов сегментов:
let path = draw.path('M10 10 L90 90');
path.plot('M10 10 C20 20, 40 20, 50 10');
При использовании массива объектов каждый сегмент задаётся ключами:
{ type: 'M', x: 10, y: 10 }.
Чтение текущих сегментов Метод
array() возвращает массив сегментов пути в удобном
формате:
let segments = path.array();
console.log(segments); // [['M', 10, 10], ['L', 90, 90]]Изменение сегментов по индексу Можно заменить отдельный сегмент:
let arr = path.array();
arr[1] = ['L', 100, 100];
path.plot(arr);SVG.js позволяет изменять координаты существующих сегментов без полной перерисовки:
Перемещение сегмента Используется метод
plot() с модифицированным массивом сегментов:
let arr = path.array();
arr[1][1] += 20; // смещаем x второй команды
arr[1][2] += 10; // смещаем y второй команды
path.plot(arr);Изменение кривой Безье Для кубических кривых
(C) можно корректировать управляющие точки:
let arr = path.array();
arr[1] = ['C', 30, 30, 60, 60, 90, 10];
path.plot(arr);Добавление новых сегментов К существующему пути
можно добавлять новые команды через метод line() или
plot():
path.plot(path.array().concat([['L', 120, 50]]));Для манипуляции стилем и внешним видом сегментов используются методы:
stroke({ color, width, linecap, linejoin }) —
настройка обводки.
path.stroke({ color: '#f06', width: 4 });fill(color) — заливка пути. Для чистых линий
рекомендуется fill('none').
opacity(value) — установка прозрачности.
Пути можно изменять динамически через трансформации:
Сдвиг
path.translate(50, 30);Масштабирование
path.scale(1.5, 1.5);Вращение вокруг центра
path.rotate(45, 50, 50);Трансформации сохраняются, не затрагивая исходные координаты сегментов. Для работы с координатами напрямую используется массив сегментов.
SVG.js поддерживает анимацию через метод animate() и
функцию изменения сегментов:
Простая анимация линии
path.animate(1000).plot('M10 10 L150 150');Анимация сложной кривой Для плавного изменения сегментов:
let newPath = [['M', 10, 10], ['C', 30, 30, 60, 60, 100, 10]];
path.animate(2000, '<>').plot(newPath);Метод позволяет задать продолжительность, кривую ускорения
(easing) и новые координаты, при этом SVG.js сам рассчитает
промежуточные точки.
Для сложных графических эффектов полезно работать с конкретными точками:
Получение координат сегмента
let segment = path.array()[1]; // ['L', 90, 90]
let x = segment[1];
let y = segment[2];Изменение конкретной точки
segment[1] += 20; // сдвигаем x
segment[2] -= 10; // сдвигаем y
path.plot(path.array());Удаление сегмента
let arr = path.array();
arr.splice(1, 1); // удаляем второй сегмент
path.plot(arr);Анимированная волна Комбинируются кривые Безье, массив сегментов и плавная анимация для создания движущейся линии.
Редактируемая диаграмма Координаты сегментов привязываются к данным графика, изменения данных сразу отражаются в пути.
Интерактивная форма Пользователь перетаскивает точки пути, а массив сегментов обновляется в реальном времени, создавая динамическое редактирование.
Манипуляция существующими путями в SVG.js открывает возможность
создавать как статические сложные формы, так и динамичные анимации с
точным контролем над каждым сегментом. Эффективное использование
массивов сегментов и методов plot(), array() и
animate() позволяет строить визуально сложные графические
элементы, полностью управляемые программно.