Работа с SVG-документом редко ограничивается созданием отдельных
элементов — ключевую роль играет управление их структурой. В Snap.svg
для этого предусмотрены методы append и
prepend, позволяющие динамически изменять иерархию
элементов и управлять порядком их отображения.
SVG-документ представляет собой древовидную структуру, где каждый элемент может содержать вложенные элементы. Порядок вложенности напрямую влияет на визуальное отображение:
Методы:
append() — добавляет элемент в конец
списка дочерних элементов;prepend() — добавляет элемент в начало
списка дочерних элементов.appendparent.append(child);
var paper = Snap(400, 400);
var rect = paper.rect(50, 50, 200, 100).attr({
fill: "blue"
});
var circle = paper.circle(150, 100, 50).attr({
fill: "red"
});
paper.append(rect);
paper.append(circle);
var group = paper.group();
group.append(rect);
group.append(circle);
rect и circle перемещаются внутрь
группы;prependparent.prepend(child);
var paper = Snap(400, 400);
var rect = paper.rect(50, 50, 200, 100).attr({
fill: "blue"
});
var circle = paper.circle(150, 100, 50).attr({
fill: "red"
});
paper.append(rect);
paper.prepend(circle);
prepend, поэтому вставляется
перед прямоугольником;Группы (group) — ключевой инструмент структурирования
SVG. Методы append и prepend активно
используются для управления их содержимым.
var paper = Snap(400, 400);
var group = paper.group();
var rect = paper.rect(0, 0, 100, 100).attr({ fill: "green" });
var circle = paper.circle(50, 50, 40).attr({ fill: "yellow" });
group.append(rect);
group.prepend(circle);
circle окажется первым элементом в группе;rect — вторым;rect перекроет circle.SVG не имеет отдельного механизма слоёв, как в графических редакторах. Порядок элементов в DOM — единственный способ управлять слоями.
| Задача | Метод |
|---|---|
| Переместить наверх | append |
| Переместить вниз | prepend |
function bringToFront(el) {
el.appendTo(el.parent());
}
Или напрямую:
el.parent().append(el);
el.parent().prepend(el);
Методы принимают один элемент за вызов. Для добавления нескольких элементов используется последовательный вызов:
group.append(rect);
group.append(circle);
group.append(text);
Перемещение элемента через append или
prepend:
Это важно при динамическом изменении структуры интерфейса.
group.append(rect);
rect не копируется;Для копирования требуется:
var clone = rect.clone();
group.append(clone);
paper.append(rect);
paper.prepend(circle);
Если элемент не добавлен ни в один контейнер:
var rect = Snap().rect(0, 0, 100, 100);
Он не будет отображаться, пока не добавлен через append
или prepend.
Методы append и prepend часто используются
вместе с:
before() — вставка перед конкретным элементом;after() — вставка после элемента;insertBefore() / insertAfter() — более
точечное управление.var background = paper.rect(0, 0, 400, 400).attr({ fill: "#eee" });
var player = paper.circle(200, 200, 20).attr({ fill: "blue" });
var ui = paper.text(10, 20, "Score: 0");
paper.append(background);
paper.append(player);
paper.append(ui);
paper.append(ui);
paper.prepend(background);
append — добавляет элемент в конец → элемент
сверху;prepend — добавляет в начало → элемент снизу;