В SVG.js группировка элементов позволяет объединять несколько
графических объектов в один контейнер, что обеспечивает упрощённое
управление, совместное трансформирование и структурирование сложной
сцены. Основной инструмент для этого — объект
SVG.Group, создаваемый с помощью метода
group().
const draw = SVG().addTo('body').size(600, 400);
const group = draw.group();
Созданная группа является контейнером, в который можно добавлять любые элементы SVG: прямоугольники, круги, линии, текст и даже другие группы. Это позволяет формировать иерархическую структуру сцены.
const rect = group.rect(100, 50).fill('red');
const circle = group.circle(40).fill('blue').move(50, 25);
После добавления элементов в группу они становятся зависимыми от трансформаций группы. Это означает, что любые перемещения, масштабирование или вращение, применённые к группе, автоматически затрагивают все её дочерние элементы.
Перемещение группы
group.move(200, 100);
Все элементы внутри группы смещаются на указанные координаты относительно исходного положения.
Масштабирование группы
group.scale(1.5);
Изменяет размеры всех дочерних объектов пропорционально заданному коэффициенту. Масштабирование происходит относительно точки (0,0) группы, если не указана другая ось.
Вращение группы
group.rotate(45, 100, 50);
Вращает все элементы группы на 45 градусов вокруг точки (100,50) внутри группы.
SVG.js поддерживает вложенность: группа может содержать другие группы, что позволяет строить сложные композиции. Вложенные группы наследуют трансформации родителя, но при этом можно применять индивидуальные трансформации к каждой подгруппе.
const subgroup = group.group();
subgroup.rect(50, 50).fill('green');
subgroup.move(30, 30);
group.rotate(30); // поворот всей группы, включая подгруппу
Доступ к элементам
Элементы внутри группы можно получить через методы
children() или
each():
group.each(function(i, children) {
this.fill('orange'); // изменяет заливку всех дочерних объектов
});
Удаление элементов из группы
circle.remove(); // удаляет элемент из группы, не затрагивая другие
Добавление элементов после создания группы
const line = draw.line(0,0,100,100).stroke({ width: 2, color: 'black' });
group.add(line); // добавляет линию в существующую группу
Группы особенно полезны при анимации комплексных объектов. Анимация, применённая к группе, автоматически распространяется на все её элементы:
group.animate(2000).move(300, 200).scale(2);
При этом сохраняется возможность анимировать отдельные элементы внутри группы независимо:
rect.animate(1000).fill('yellow');
| Метод / Свойство | Описание |
|---|---|
group() |
Создаёт новую группу |
add(element) |
Добавляет элемент в группу |
remove(element) |
Удаляет элемент из группы |
children() |
Получает массив дочерних элементов |
each(callback) |
Итерация по всем элементам группы |
move(x, y) |
Перемещает группу |
scale(factor) |
Масштабирует группу |
rotate(angle, cx, cy) |
Вращает группу вокруг точки |
each() с
осторожностью, так как перебор всех элементов может влиять на
производительность.Группировка в SVG.js — мощный инструмент для структурирования, управления и анимации SVG-сцен, обеспечивающий гибкость и удобство работы с множеством графических элементов одновременно.