Для работы с текстом в SVG.js используется метод text(),
который позволяет создавать текстовые элементы и управлять их
содержимым. Базовый синтаксис:
const draw = SVG().addTo('body').size(600, 400);
const text = draw.text('Пример текста');
Метод text() возвращает объект SVG.Text,
предоставляющий широкий набор методов для форматирования и
позиционирования текста.
1. Размер и шрифт
Для изменения шрифта и размера используется метод font()
с объектом настроек:
text.font({
family: 'Arial',
size: 24,
weight: 'bold',
style: 'italic',
anchor: 'middle',
leading: 1.5
});
'Arial',
'Times New Roman' и др.)'normal',
'bold')'normal',
'italic')'start', 'middle', 'end')2. Цвет и заливка
Цвет текста задается через fill():
text.fill('#FF5733'); // Цвет в формате HEX
Можно использовать и прозрачность:
text.fill({ color: '#000000', opacity: 0.7 });
3. Обводка текста
Для создания контура вокруг текста применяется
stroke():
text.stroke({ color: '#000000', width: 2, linecap: 'round' });
'round', 'square', 'butt')SVG.js позволяет создавать многострочные тексты с помощью метода
plain() и переносов \n:
const multiline = draw.text('Первая строка\nВторая строка\nТретья строка');
multiline.font({ size: 18, leading: 1.6 });
Метод leading управляет расстоянием между строками,
позволяя создавать аккуратные блоки текста.
Текст можно менять динамически с помощью метода text()
или plain():
text.text('Новый текст'); // полностью заменяет содержимое
text.plain('Только текст, без HTML-разметки');
Разница между text() и plain() заключается
в поддержке HTML-подобной разметки: text() позволяет
использовать для стилизации отдельных частей
текста.
для сложного форматированияМетод tspan() позволяет создавать подстроки с
индивидуальными свойствами внутри одного текстового элемента:
const complexText = draw.text(function(add) {
add.tspan('Красный').fill('#FF0000');
add.tspan(' и ').fill('#000000');
add.tspan('синий').fill('#0000FF').font({ weight: 'bold' });
});
tspan) может иметь отдельный цвет,
шрифт и размерТекстовые элементы SVG.js поддерживают все трансформации:
text.rotate(45, 100, 100); // Поворот на 45° вокруг точки (100, 100)
text.scale(1.5, 1.5); // Масштабирование
text.translate(50, 30); // Смещение
Трансформации позволяют создавать сложные графические эффекты и анимации текста без изменения исходного содержимого.
SVG.js интегрирует анимацию текста через animate():
text.animate(2000).fill('#00FF00').move(200, 100);
Для более сложных анимаций используется цепочка методов:
text.animate(1000, '<>').rotate(360).animate(1000, '<>').rotate(0);
Методы cx(), cy(), x(),
y() управляют координатами текста:
text.cx(300).cy(200); // Центр текста в точке (300, 200)
text.x(50).y(100); // Верхний левый угол текста
anchor в font() дополнительно влияет на
точку отсчетаSVG.js не поддерживает автоматический перенос текста по ширине контейнера, но можно реализовать вручную:
function wrapText(textElement, maxWidth) {
const words = textElement.text().split(' ');
let line = '';
textElement.clear();
words.forEach((word) => {
const tspan = textElement.tspan(line + word + ' ').attr({ x: 0, dy: '1.2em' });
if (tspan.length() > maxWidth) {
line = word + ' ';
textElement.tspan(line).attr({ x: 0, dy: '1.2em' });
} else {
line += word + ' ';
}
});
}
Такой подход позволяет разбивать длинные строки на несколько
для корректного отображения текста.