SVG.js предоставляет мощный инструмент для создания сложных графических композиций на веб-странице. Основная единица работы — это элемент SVG, который можно динамически создавать, модифицировать и группировать для построения более сложных структур.
Для добавления графического элемента используется метод
draw.*(). Например, создание круга:
const draw = SVG().addTo('body').size(600, 400);
const circle = draw.circle(100).fill('#f06').move(50, 50);
Ключевые моменты:
fill() задаёт цвет заливки.move(x, y) позиционирует элемент.Для комплексных композиций важно использовать группы. Метод
group() позволяет объединять элементы:
const group = draw.group();
group.add(draw.rect(100, 50).fill('#0f6'));
group.add(draw.circle(40).fill('#06f').move(30, 10));
Особенности работы с группами:
SVG.js предоставляет гибкие методы трансформации:
translate(x, y) — сдвиг элемента.rotate(angle, cx, cy) — поворот вокруг точки
(cx, cy).scale(sx, sy) — масштабирование.Для сложных графиков часто используют цепочки трансформаций:
group.transform({
translateX: 50,
translateY: 20,
rotate: 45,
scaleX: 1.5,
scaleY: 1.5
});
Анимации упрощаются методом animate():
circle.animate(1000, '<>').move(200, 200).fill('#ff0');
Подсказки по анимации:
<,
>, < > и т.п.).Для сложных графиков критично понимать координатные системы SVG:
bbox() и rbox() позволяют получить
габариты элемента в локальной и глобальной системе соответственно.Пример получения размеров группы:
const box = group.bbox();
console.log(box.x, box.y, box.width, box.height);
SVG.js поддерживает линии, многоугольники и кривые:
const line = draw.line(0, 0, 100, 100).stroke({ width: 2, color: '#f00' });
const polyline = draw.polyline('0,0 50,25 50,75 100,100').fill('none').stroke({ width: 2 });
const path = draw.path('M10 80 C 40 10, 65 10, 95 80 S 150 150, 180 80').fill('none').stroke({ width: 2 });
Особенности работы с путями (path) и
кривыми:
M, L,
C, S, Q, T,
Z.C и S) позволяют формировать
плавные изгибы.plot().Для создания интерактивных графиков удобно использовать вложенные группы:
const mainGroup = draw.group();
const subGroup = draw.group().addTo(mainGroup);
subGroup.add(draw.rect(60, 60).fill('#0ff'));
subGroup.add(draw.circle(20).fill('#f0f').move(20, 20));
mainGroup.transform({ rotate: 30, translateX: 100, translateY: 50 });
Преимущества вложенной структуры:
click(), mouseover() и др.SVG.js поддерживает маски и клипы для создания сложных визуальных эффектов:
const mask = draw.mask().add(draw.circle(50).move(25, 25));
const rect = draw.rect(100, 100).fill('#f06').maskWith(mask);
Особенности масок:
clipWith) позволяет ограничивать видимую
область.SVG.js позволяет добавлять интерактивность через события и методы модификации:
circle.click(function() {
this.fill({ color: '#0f0' });
});
group.on('mouseover', function() {
this.scale(1.2);
}).on('mouseout', function() {
this.scale(1);
});
Комплексная композиция с SVG.js строится на сочетании всех этих инструментов, что позволяет создавать детализированные и интерактивные графические интерфейсы без использования сторонних библиотек для анимации и трансформации.