В библиотеке SVG.js группировка элементов
осуществляется с помощью метода group(). Группа позволяет
объединять несколько графических объектов для совместного управления
ими: перемещения, трансформаций, анимаций и изменения атрибутов. Это
упрощает организацию сложных графических сцен и позволяет
структурировать код.
const draw = SVG().addTo('body').size(600, 400);
// Создание группы
const group = draw.group();
// Добавление элементов в группу
const rect = group.rect(100, 50).fill('blue');
const circle = group.circle(50).fill('red').move(120, 0);
В примере создается группа group, в которую помещаются
прямоугольник и круг. Любые изменения группы будут автоматически
применяться ко всем её элементам.
Для перемещения группы используется метод move(x, y) или
translate(dx, dy).
move(x, y) задает абсолютные координаты верхнего левого
угла группы.translate(dx, dy) сдвигает группу на относительное
расстояние dx, dy от текущего положения.// Абсолютное перемещение
group.move(50, 100);
// Относительное перемещение
group.translate(30, 20);
Важно: при перемещении группы внутренние элементы сохраняют свои координаты относительно группы, что упрощает работу с комплексными объектами.
Группы могут содержать другие группы, что позволяет создавать иерархические структуры:
const subGroup = draw.group();
subGroup.rect(40, 40).fill('green');
group.add(subGroup);
// Перемещение внешней группы перемещает все внутренние элементы
group.move(200, 50);
Вложенные группы наследуют трансформации родительской группы. Например, масштабирование внешней группы автоматически изменяет размеры всех вложенных элементов.
Методы rotate, scale и skew
применяются к группе и влияют на все элементы внутри:
group.rotate(45); // Поворот всей группы на 45 градусов
group.scale(1.5); // Увеличение размера группы на 50%
Для поворота или масштабирования относительно конкретной точки можно использовать вторые параметры:
group.rotate(30, 100, 100); // Поворот относительно точки (100, 100)
group.scale(2, 0, 0); // Масштабирование относительно координат (0, 0)
SVG.js позволяет динамически перемещать элементы из одной группы в
другую через метод addTo():
const groupA = draw.group();
const groupB = draw.group();
const circle = groupA.circle(50).fill('orange');
// Перемещаем элемент в другую группу
circle.addTo(groupB);
После этого элемент circle станет частью
groupB. Любые трансформации или атрибуты группы B будут
применяться к нему. При этом элемент автоматически удаляется из исходной
группы.
<g> элемент, поэтому все стандартные методы работы с
DOM, включая append и remove, также совместимы
с SVG.js.children() и работа с элементами внутри группыДля доступа к элементам внутри группы используется метод
children():
group.children().forEach(el => {
el.fill('purple'); // Применяем цвет ко всем элементам группы
});
Это позволяет изменять атрибуты или трансформации отдельных объектов без разрушения структуры группы.
addTo(targetGroup) для перемещения
элементов.move, translate,
rotate, scale позволяют управлять группами как
единым объектом.Перемещение элементов между группами в SVG.js — мощный инструмент для структурирования и динамической работы с графикой.