В Snap.svg группы создаются с помощью метода
paper.group(), который позволяет объединять несколько
элементов SVG в единую логическую структуру. Группы обеспечивают удобное
управление несколькими объектами сразу: их позиционирование,
трансформации, стили и события могут применяться ко всей группе
целиком.
Пример создания группы:
var paper = Snap(800, 600);
var circle = paper.circle(100, 100, 50).attr({fill: "red"});
var rect = paper.rect(150, 50, 100, 100).attr({fill: "blue"});
var group = paper.group(circle, rect);
В этом примере круг и прямоугольник объединены в одну группу. Любое
преобразование, применённое к group, затронет оба
элемента.
Группы позволяют применять трансформации сразу ко всем элементам внутри:
group.transform('t200,0'); // смещение группы на 200 пикселей по оси X
group.transform('s1.5,1.5'); // масштабирование группы на 150%
group.transform('r45,150,100'); // поворот на 45° относительно точки (150,100)
Трансформации можно комбинировать, например:
group.transform('t50,50 r30 s1.2,1.2');
Важно помнить, что порядок трансформаций имеет значение: сначала выполняется смещение, затем поворот и масштабирование.
Атрибуты и стили можно задавать не только отдельным элементам, но и всей группе сразу.
group.attr({
opacity: 0.5,
stroke: "black",
strokeWidth: 3
});
В этом случае прозрачность и обводка применяются ко всем элементам группы.
Если отдельный элемент имеет собственные атрибуты, значения группы дополняют их, а не заменяют полностью. Например, цвет заливки, заданный на элементе, сохранится, если не переопределять его на уровне группы.
Snap.svg поддерживает вложенные группы, что позволяет создавать сложные иерархические структуры.
var innerGroup = paper.group(
paper.circle(50, 50, 25),
paper.rect(60, 30, 40, 40)
);
var outerGroup = paper.group(innerGroup, paper.text(100, 100, "Label"));
Трансформации и атрибуты внешней группы применяются ко всем вложенным элементам и группам.
Методы для доступа к отдельным элементам группы:
group[i] — получение элемента по индексу.group.select(selector) — выбор элемента по
CSS-подобному селектору.group.forEach(callback) — итерация по всем элементам
группы.Пример:
group.forEach(function(el) {
el.attr({fill: "green"});
});
Все элементы группы будут окрашены в зелёный цвет.
События можно привязывать не только к отдельным элементам, но и к группе целиком:
group.click(function() {
this.transform('t0,50'); // сдвиг группы вниз при клике
});
События распространяются на всю группу, что упрощает управление интерактивными элементами, состоящими из нескольких объектов.
Порядок слоёв в группе можно изменять с помощью методов:
group.append(element) — добавить элемент в конец
группы.group.prepend(element) — добавить элемент в начало
группы.group.insertBefore(element) и
group.insertAfter(element) — управлять позицией элемента
относительно других.Это позволяет создавать сложные композиции, контролируя, какие элементы будут перекрывать другие.
Группы отлично подходят для анимаций нескольких элементов одновременно:
group.animate({transform: 't200,0 r45'}, 1000, mina.easeinout);
Все элементы группы будут анимироваться синхронно, сохраняя относительное положение друг к другу.
Анимации можно комбинировать с атрибутами группы:
group.animate({opacity: 0.3, transform: 's1.5,1.5'}, 1500, mina.bounce);
use: для
повторного использования сложных объектов без копирования всей
структуры.Группы в Snap.svg — мощный инструмент для управления сложными SVG-композициями, позволяющий эффективно работать с множеством элементов одновременно.