В Snap.svg каждый графический объект представлен
Element. Элемент создаётся через методы библиотеки,
такие как paper.circle(), paper.rect(),
paper.path() и другие. После создания объект автоматически
становится частью SVG-документа, связанного с холстом
Snap.
Пример создания круга:
var s = Snap(800, 600);
var circle = s.circle(100, 100, 50); // x, y, радиус
circle.attr({
fill: "#3498db",
stroke: "#2980b9",
strokeWidth: 4
});
Каждый элемент предоставляет методы для управления атрибутами, стилями и поведением.
.attr() — основной метод для получения
и установки атрибутов элемента.
var fillColor = circle.attr("fill"); // "#3498db"
circle.attr("stroke", "#e74c3c");
circle.attr({
fill: "#2ecc71",
stroke: "#27ae60",
strokeWidth: 6
});
Особенности метода .attr():
x, y,
r, width, height, d
(для path).data- атрибуты..transform() позволяет применять к
элементу комплексные трансформации. Поддерживаются следующие
операции:
tX,Y — перенос (translate)rУ, X, Y — вращение (rotate) вокруг точки
(X, Y)sX,Y, X, Y — масштабирование (scale) относительно точки
(X, Y)mA,B,C,D,E,F — матричная трансформацияПример последовательного применения трансформаций:
circle.transform("t200,50r45,100,100s1.5,1.5");
Метод также поддерживает получение текущих трансформаций элемента:
var currentTransform = circle.transform().localMatrix;
.append() и
.prepend() добавляют элементы внутрь
контейнера:
var group = s.group();
group.append(circle); // Добавление в конец группы
.appendTo() и
.prependTo() вставляют элемент в другой
контейнер напрямую:
circle.appendTo(group);
.remove() полностью удаляет элемент из
DOM:
circle.remove();
.clear() удаляет все дочерние элементы
контейнера:
group.clear();
.getBBox() возвращает объект с полями
x, y, width, height,
cx, cy:var bbox = circle.getBBox();
console.log(bbox.cx, bbox.cy); // координаты центра
.getCTM() — получение матрицы
текущей трансформации. Используется для точного позиционирования
относительно других элементов.
.getBBox(true) — возвращает
bounding box с учётом трансформаций.
.attr("text") для текстовых
элементов: получение и установка текста.
.select() и
.selectAll() — поиск элементов внутри
контейнера:
var textElement = s.select("text");
var allRects = s.selectAll("rect");
.clone() создаёт полную копию элемента
с сохранением всех атрибутов:var circleClone = circle.clone();
circleClone.transform("t100,0");
.animate(attrs, duration, easing, callback)
— плавное изменение атрибутов:circle.animate({ r: 80, fill: "#e67e22" }, 1000, mina.easeinout, function() {
console.log("Анимация завершена");
});
.stop() — останавливает текущую
анимацию элемента.
.toFront() и
.toBack() — управление порядком
отображения:
circle.toFront(); // Перемещает элемент выше всех
circle.toBack(); // Перемещает элемент на задний план
.insertBefore() и
.insertAfter() позволяют вставлять элемент
перед или после другого элемента.Группы (group) в Snap.svg — это контейнеры, которые
позволяют управлять несколькими элементами как единым целым.
.add() — добавляет элемент в
группу..forEach(callback) — выполняет функцию
для каждого дочернего элемента:group.forEach(function(el) {
el.attr({ stroke: "#c0392b" });
});
.exclude() — удаляет элемент из группы
без удаления его из DOM..data(key, value) — установка
пользовательских данных:circle.data("id", 123);
.data(key) — получение данных:var id = circle.data("id"); // 123
.removeData(key) — удаление данных по
ключу.Элементы Snap.svg поддерживают стандартные события:
circle.click(function() {
this.attr({ fill: "#9b59b6" });
});
circle.hover(
function() { this.attr({ strokeWidth: 8 }); },
function() { this.attr({ strokeWidth: 4 }); }
);
.drag(onMove, onStart, onEnd) —
позволяет реализовать перетаскивание элементов:circle.drag(
function(dx, dy) { this.attr({ cx: this.data("ox")+dx, cy: this.data("oy")+dy }); },
function() { this.data("ox", this.attr("cx")); this.data("oy", this.attr("cy")); },
function() { console.log("Перетаскивание завершено"); }
);
.hide() и
.show() — простое управление видимостью
элемента..attr("display", "none") и
.attr("display", "block") — управление
через атрибут SVG..addClass(),
.removeClass(),
.hasClass() — работа с CSS-классами..attr({ clipPath: path }) — задаёт
маску для элемента..mask() — применяет маску к элементу,
которая может быть другим элементом Snap.svg..parent() — возвращает родительский
контейнер..children() — возвращает все дочерние
элементы..next() и
.prev() — соседние элементы в
DOM-структуре SVG.Snap.svg предоставляет гибкий набор методов для каждого элемента,
позволяя полностью контролировать атрибуты, трансформации,
анимации, события, структуру и визуальное оформление. Владение
методами Element — ключ к созданию сложных и интерактивных
SVG-композиций в JavaScript.