SVG.js предоставляет гибкий и интуитивно понятный интерфейс для
работы с обводкой объектов, включая создание пунктирных линий и сложных
штриховых паттернов. Пунктирная обводка задаётся с помощью свойства
stroke-dasharray, которое указывает последовательность
длины штриха и промежутка.
stroke({ color, width, linecap, dasharray, dashoffset })
Этот метод используется для настройки всех параметров обводки. Среди них
ключевыми для пунктирной линии являются:
dasharray — массив чисел или строка, задающая длины
штрихов и промежутков.dashoffset — смещение начала пунктирной линии.linecap — стиль окончания штриха (butt,
round, square).Пример:
const draw = SVG().addTo('body').size(400, 200);
const rect = draw.rect(200, 100).fill('none').stroke({
color: '#f06',
width: 4,
linecap: 'round',
dasharray: [10, 5],
dashoffset: 0
});
В этом примере создается прямоугольник с штрихами длиной 10
пикселей и промежутками 5 пикселей. Ключевой момент —
linecap: 'round', который скругляет концы штрихов для более
мягкого визуального эффекта.
Свойство dasharray принимает как массив чисел, так и
строку, разделённую пробелами или запятыми:
// Массив чисел
dasharray: [5, 10, 2, 8]
// Строка
dasharray: '5 10 2 8'
Каждое число задаёт длину штриха или промежутка. Если элементов нечётное количество, массив повторяется автоматически, создавая непрерывный паттерн.
SVG.js поддерживает плавное изменение dashoffset, что
позволяет создавать эффект “движущейся линии”:
rect.animate(2000, '<>').stroke({ dashoffset: 25 }).loop();
Здесь loop() обеспечивает непрерывное повторение
анимации, создавая иллюзию движения штрихов вдоль контура объекта.
Пунктирная обводка одинаково хорошо применяется к любым объектам SVG:
прямоугольникам, кругам, эллипсам, линиям и путям (path).
Для кривых Бéзье или сложных путей важно учитывать, что длина штриха
учитывается по длине всего контура, а не по отдельным
сегментам.
const path = draw.path('M10 80 C 40 10, 65 10, 95 80 S 150 150, 180 80')
.fill('none')
.stroke({ color: '#00f', width: 3, dasharray: [15, 10] });
SVG.js позволяет динамически менять параметры пунктирной линии в процессе работы приложения:
path.on('mouseover', () => {
path.stroke({ dasharray: [5, 5], color: '#f00' });
});
path.on('mouseout', () => {
path.stroke({ dasharray: [15, 10], color: '#00f' });
});
Это делает возможным создание интерактивных визуализаций, где пунктирная обводка реагирует на действия пользователя.
Для сложных графических эффектов можно создавать несколько объектов с разными штриховыми паттернами, накладывая их друг на друга. Например, базовая линия с тонкими штрихами и поверх — более длинные штрихи другого цвета, создавая эффект текстуры или сетки.
draw.line(0, 50, 400, 50)
.stroke({ width: 2, color: '#ccc', dasharray: [5, 5] });
draw.line(0, 50, 400, 50)
.stroke({ width: 2, color: '#333', dasharray: [15, 10], dashoffset: 5 });
linecap: 'round', особенно на кривых или коротких
сегментах.dashoffset создают динамическое ощущение
движения, но важно корректно рассчитывать длину штрихов для
непрерывности паттерна.dasharray, можно
создавать сложные графические эффекты без увеличения сложности
SVG-структуры.dasharray в
пикселях могут изменять визуальное восприятие при ресайзе. В таких
случаях используют процентные или вычисляемые значения.Пунктирная обводка в SVG.js — это не просто декоративный элемент. Это мощный инструмент для визуализации, анимации и интерактивных эффектов, который легко интегрируется в сложные графические интерфейсы и игры на JavaScript.