В SVG.js текст можно не просто размещать как отдельный элемент, а
привязывать его к сложным кривым и линиям с помощью тегов
<textPath>. Это позволяет создавать надписи,
следящие за контуром фигуры, например, по кругу, дуге или произвольной
кривой.
const draw = SVG().addTo('body').size(600, 400);
// Создаем произвольный путь
const path = draw.path('M50,150 C150,50 350,250 450,150')
.fill('none')
.stroke({ width: 2, color: '#333' });
M50,150 — перемещение пера к начальной точке.C150,50 350,250 450,150 — кубическая кривизна (cubic
Bezier).Метод .path() возвращает объект SVG.Path, с
которым можно работать, изменяя форму и стиль линии.
const text = draw.text(function(add) {
add.tspan('Текст вдоль кривой SVG.js');
});
text.path(path);
.path() указывает путь, вдоль которого будет
следовать текст.startOffset.text.path(path).attr({
startOffset: '25%' // смещение текста относительно длины пути
});
startOffset может быть в процентах ('50%')
или пикселях ('100px').Для создания сложных надписей с несколькими строками используется
объект tspan:
const multilineText = draw.text(function(add) {
add.tspan('Первая строка').newLine();
add.tspan('Вторая строка').newLine();
add.tspan('Третья строка');
});
multilineText.path(path).attr({ startOffset: '0%' });
.newLine() переносит текст на новую строку.tspan на кривой,
распределяя их вдоль пути.SVG.js позволяет анимировать движение текста вдоль кривой с помощью
.animate():
text.path(path)
.animate(5000, '<>')
.attr({ startOffset: '100%' });
5000 — продолжительность анимации в миллисекундах.'<>' — тип easing (ускорение/замедление
движения).SVG.js поддерживает стандартные CSS-атрибуты для текста:
text.font({
family: 'Arial',
size: 24,
anchor: 'middle', // центрирование вдоль пути
weight: 'bold'
}).fill('#FF6600');
anchor — определяет точку привязки текста к пути
(start, middle, end)..fill() задает цвет текста..font().Текст можно менять в реальном времени:
text.clear().text('Новый текст вдоль кривой');
.clear() удаляет все предыдущие
tspan..path(path) для сохранения привязки.Путь также можно изменять динамически:
path.plot('M50,200 C150,100 350,300 450,200');
text.path(path); // текст автоматически обновит позицию
.plot() задает новый SVG-путь.SVG.js позволяет работать с:
draw.circle().path()).draw.polyline().path()).draw.path()).const circle = draw.circle(200).move(100, 100);
text.path(circle);
startOffset можно задавать точку начала
текста.anchor: 'middle' для симметричного размещения.SVG.js предоставляет полный контроль над текстом вдоль пути, сочетая гибкость стандартного SVG и удобный синтаксис JavaScript. Такой подход позволяет создавать визуально привлекательные интерфейсы, анимации и графические элементы с динамическим текстом, следящим за сложными кривыми.