В библиотеке SVG.js для создания текстовых элементов
используется метод .text(), который позволяет вставлять как
простые строки, так и HTML-подобное форматирование с использованием
tspan. Текст создается внутри SVG-контейнера, который
предварительно нужно создать через SVG():
const draw = SVG().addTo('body').size(600, 400);
const text = draw.text('Привет, SVG.js!');
Параметры метода .text() могут быть строкой или
функцией, возвращающей строку. Функция позволяет динамически формировать
содержимое текста на основе данных или состояния приложения.
tspan для многострочного текстаДля создания многострочных текстов применяется вложенный элемент
tspan. Он позволяет задавать отдельные стили и позиции для
каждой строки текста:
const multiText = draw.text(function(add) {
add.tspan('Первая строка').newLine();
add.tspan('Вторая строка').fill('#ff0000');
add.tspan('Третья строка').font({weight: 'bold'});
});
Метод .newLine() автоматически переносит следующую
строку вниз, учитывая текущий размер шрифта. Каждый tspan
можно стилизовать независимо, изменяя цвет, размер, начертание или
положение.
Библиотека предоставляет мощный набор методов для стилизации текста:
.font() — задает свойства шрифта: размер, семейство,
стиль, вес, кернинг и т. д..fill() — изменяет цвет текста..stroke() — добавляет обводку вокруг букв..letterSpacing() и .wordSpacing() —
регулируют межбуквенный и межсловный интервал.Пример применения всех настроек:
text.font({
family: 'Arial',
size: 24,
weight: 'bold',
style: 'italic'
}).fill('#007acc')
.stroke({ color: '#000000', width: 1 });
Текстовые элементы можно перемещать, вращать и масштабировать с помощью методов трансформации:
.move(x, y) — задает позицию текста..center(cx, cy) — центрирует текст относительно
указанных координат..rotate(angle, cx, cy) — вращает текст вокруг точки
(cx, cy)..scale(sx, sy, cx, cy) — масштабирует текст
относительно точки.text.move(100, 50).rotate(45).scale(1.5, 1.5);
Для многострочного текста каждый tspan позиционируется
относительно родительского текста, что позволяет создавать сложные
компоновки.
SVG.js поддерживает использование масок и клипов для текста. Это позволяет создавать эффекты обтекания или показывать текст только в заданной области:
const mask = draw.rect(200, 50).fill('#fff');
const maskedText = draw.text('Текст с маской').fill('#000');
maskedText.maskWith(mask);
Клипы (clipWith) работают аналогично и позволяют
вырезать видимую область текста по форме SVG-объекта.
Анимации текста реализуются с помощью метода .animate().
Можно изменять позицию, цвет, размер или непрозрачность текста:
text.animate(2000, '<>').move(300, 200).fill('#ff6600');
Для более сложной анимации можно комбинировать .tspan()
с анимациями отдельных строк, создавая эффект появления текста по буквам
или строкам.
Метод .text() может вызываться повторно для изменения
содержимого текста после его создания:
text.text('Обновленный текст');
Использование функции позволяет автоматически обновлять текст при изменении данных:
let counter = 0;
setInterval(() => {
text.text(() => `Счет: ${counter++}`);
}, 1000);
Текстовые элементы поддерживают стандартные события SVG:
.click(handler) — клик по тексту..mouseover(handler) и .mouseout(handler) —
наведение мыши..dblclick(handler) — двойной клик.text.click(() => {
text.fill({ color: '#ff0000' });
});
С помощью событий можно реализовать интерактивные подписи, подсветку текста или анимацию при наведении.
SVG.js позволяет привязывать текст к кривой или пути с помощью метода
.pathText() через расширение плагинов. Текст повторяет
форму линии, что используется для арок, кривых и декоративных
надписей.
const path = draw.path('M10 80 C 40 10, 65 10, 95 80');
const curvedText = draw.text('Текст по кривой').path(path);
Кривые можно стилизовать, а текст динамически обновлять, что делает возможным создание сложных графических композиций с текстом.
Основная структура работы с текстом в SVG.js сводится к следующим блокам:
.text().tspan для многострочных и стилизованных
строк..font(),
.fill(), .stroke()..move(),
.rotate(), .scale().Эта последовательность позволяет создавать интерактивные, стилизованные и динамически управляемые текстовые элементы любой сложности.