Метод attr() является универсальным инструментом для
работы с атрибутами SVG-элементов. Он позволяет читать,
устанавливать и массово изменять атрибуты графических объектов.
В Snap.svg этот метод применяется как к отдельным элементам, так и к
группам элементов.
Синтаксис метода:
element.attr(attributeName, value);
element.attr({ attribute1: value1, attribute2: value2, ... });
element.attr(attributeName);
attributeName — имя атрибута SVG (например,
fill, stroke, stroke-width,
x, y).value — значение атрибута. Может быть строкой, числом,
цветом в формате #RRGGBB, RGB или именем цвета.value, метод возвращает текущие
значения атрибутов.Для получения значения атрибута используется вызов с одним аргументом:
var fillColor = circle.attr("fill");
console.log(fillColor); // Например, "#ff0000"
Можно одновременно получить несколько атрибутов, передав массив:
var attrs = circle.attr(["fill", "stroke", "r"]);
console.log(attrs); // {fill: "#ff0000", stroke: "#000000", r: 50}
Особенности:
null
или значение по умолчанию SVG.Для изменения одного атрибута достаточно передать имя и значение:
circle.attr("fill", "#00ff00"); // Задаёт зелёный цвет заливки
rect.attr("stroke-width", 5); // Устанавливает толщину обводки в 5 пикселей
Важно понимать, что несуществующие атрибуты автоматически создаются, если SVG их поддерживает.
Snap.svg позволяет изменять сразу несколько атрибутов с помощью объекта:
circle.attr({
fill: "blue",
stroke: "black",
strokeWidth: 2
});
Преимущества такого подхода:
attr().attr()Метод attr() поддерживает атрибут
transform, который применяется для поворота,
масштабирования, сдвига и наклона элементов:
rect.attr({
transform: "rotate(45 50 50) scale(1.5)"
});
rotate(angle cx cy) — поворот на angle
градусов вокруг точки (cx, cy).scale(sx sy) — масштабирование по горизонтали
sx и вертикали sy. Если sy не
указан, используется sx.translate(dx dy) — сдвиг на dx и
dy пикселей.Особенности:
element.transform();
через attr() значение перезаписывает текущую
трансформацию.attr({ transform }) с методами анимации Snap.svg.Помимо стандартных атрибутов SVG, через attr() можно
изменять CSS-подобные свойства, такие как:
text.attr({
"font-size": 24,
"font-family": "Arial",
"text-anchor": "middle",
"fill": "#333"
});
Особенности:
attr() используют формат с
дефисами (font-size), а не camelCase.Можно устанавливать атрибуты через функции, что удобно при генерации графики или анимации:
circle.attr({
r: function(i) { return 20 + i * 5; },
fill: function() { return Math.random() > 0.5 ? "red" : "green"; }
});
Snap.svg поддерживает хранение произвольных данных через
data():
circle.attr({ "data-id": 123, "data-type": "highlight" });
console.log(circle.attr("data-id")); // 123
data-* полностью совместимы с HTML5 и SVG
спецификацией.strokeWidth: 3 будет
"3".attr() с
объектом полностью перезаписывает указанные атрибуты, но не затрагивает
другие.attr() имеют приоритет над inline CSS, но уступают
!important в стилях.Метод attr() является фундаментальным инструментом
Snap.svg, обеспечивая гибкое управление внешним видом и поведением
SVG-элементов. Его универсальность проявляется как при простых
изменениях одного атрибута, так и при сложных динамических
трансформациях и генерации интерактивной графики.