В Snap.svg обертка (или wrapper) представляет собой объект, который инкапсулирует элемент SVG и предоставляет методы для управления его свойствами, трансформациями и событиями. Основным преимуществом обертки является удобный интерфейс для манипуляции элементами без необходимости напрямую работать с DOM.
Простейший способ создания обертки — использовать метод
Snap() для получения холста:
var s = Snap(800, 600); // создаем SVG холст размером 800x600
Эта переменная s сама по себе является оберткой для
SVG-контейнера. Через неё можно создавать фигуры:
var circle = s.circle(150, 150, 100); // создаем круг с центром (150,150) и радиусом 100
circle.attr({
fill: "#3498db",
stroke: "#2c3e50",
strokeWidth: 5
});
Каждый созданный элемент (circle, rect,
path) является оберткой, которая предоставляет следующие
возможности:
element.attr({}) позволяет устанавливать или получать
атрибуты SVG.element.transform("r45") поворачивает элемент на 45
градусов. Поддерживаются комбинированные трансформации:
"t100,50 r30 s2,2".element.click(handler) или
element.hover(enterHandler, leaveHandler).attr и
работа с атрибутамиМетод attr является ключевым хелпером для работы с
элементами:
circle.attr({
fill: "#e74c3c",
stroke: "#8e44ad",
strokeWidth: 10,
opacity: 0.7
});
Можно также получить значение конкретного атрибута:
var fillColor = circle.attr("fill"); // "#e74c3c"
attr поддерживает динамическое
обновление, позволяя применять новые значения в любое
время.
Snap.svg предоставляет мощные хелперы для трансформаций:
translate):
element.transform("t100,50") сдвигает элемент на 100px по X
и 50px по Y.rotate):
element.transform("r45,150,150") поворачивает элемент на
45° относительно точки (150,150).scale):
element.transform("s2,2,150,150") увеличивает элемент в 2
раза относительно указанной точки.Комбинации трансформаций объединяются строкой с пробелами:
circle.transform("t50,50 r30 s1.5,1.5");
Для удобства можно использовать методы-хелперы:
circle.translate(50, 50);
circle.rotate(30, 150, 150);
circle.scale(1.5, 1.5, 150, 150);
Эти методы обновляют текущую трансформацию без перезаписи других.
<g>)Обертки можно объединять в группы для совместного управления элементами:
var g = s.group(circle, s.rect(100, 100, 200, 150));
g.attr({opacity: 0.5});
g.transform("t50,50 r15");
Группа наследует все методы обертки:
Snap.svg предоставляет встроенные хелперы для анимаций через метод
animate:
circle.animate({cx: 400, fill: "#2ecc71"}, 1000, mina.bounce);
Параметры метода:
mina.linear, mina.bounce,
mina.elastic.Обертки также поддерживают текстовые элементы:
var text = s.text(200, 200, "Snap.svg");
text.attr({
fontSize: 40,
fill: "#f39c12",
textAnchor: "middle"
});
Текст можно трансформировать и анимировать так же, как графические элементы. Группы позволяют комбинировать текст и фигуры для сложных композиций.
element.remove() — удаляет элемент из DOM.element.clone() — создает копию элемента с теми же
атрибутами.element.appendTo(group) /
element.prependTo(group) — добавляет элемент в группу.element.getBBox() — возвращает bounding box элемента:
{x, y, width, height}.Snap.path.toCubic(path) — преобразует путь в кривые
Безье для упрощения анимации.Обертки поддерживают цепочку вызовов:
circle.attr({fill: "#1abc9c"})
.transform("t100,0")
.animate({r: 360}, 2000, mina.linear);
Такой подход повышает читаемость кода и позволяет комбинировать операции без промежуточных переменных.
События работают непосредственно с обертками:
circle.click(function() {
this.attr({fill: "#e67e22"});
});
circle.hover(
function() { this.attr({strokeWidth: 10}); },
function() { this.attr({strokeWidth: 5}); }
);
События наследуются при добавлении элемента в группу, что позволяет организовать интерактивные композиции.
Обертки в Snap.svg — это не просто объект-обертка для элемента SVG, а полноценный инструмент, объединяющий управление атрибутами, трансформациями, анимациями и событиями. Хелперы делают код лаконичным, позволяют создавать сложные динамические визуализации, группировать элементы и работать с ними как с единым объектом, что делает Snap.svg удобным и мощным инструментом для веб-графики.