В библиотеке SVG.js управление DOM-структурой
осуществляется через объектную модель элементов SVG. Каждый элемент,
созданный с помощью SVG() или методов, таких как
rect(), circle(), group(), имеет
собственные методы для управления своим состоянием и положением в DOM.
Удаление элементов из DOM — важная операция при динамическом изменении
графики, например, при анимации или интерактивных интерфейсах.
remove()Наиболее прямой способ удалить элемент — использование метода
remove(). Он полностью удаляет элемент из
DOM, освобождая память и исключая возможность дальнейшего рендеринга
этого объекта.
const draw = SVG().addTo('body').size(500, 500);
const circle = draw.circle(100).fill('#f06');
// Удаление элемента
circle.remove();
После вызова remove() элемент полностью исчезает из
документа, а его переменные остаются в памяти до тех пор, пока на них
есть ссылки в коде. Важно понимать, что повторный вызов методов на
удаленном элементе не имеет эффекта на DOM.
clear()Если требуется удалить все дочерние элементы
контейнера (например, группы <g>),
используется метод clear(). Этот метод
очищает содержимое контейнера, не удаляя сам контейнер.
const group = draw.group();
group.rect(50, 50).fill('#0f0');
group.circle(30).fill('#00f');
// Очистка группы
group.clear();
После вызова clear() группа остаётся в DOM, но все её
дочерние элементы удалены. Этот метод полезен при повторной перерисовке
содержимого группы без необходимости пересоздавать контейнер.
remove() в
контексте группЭлементы, находящиеся в группе, можно удалять как индивидуально, так и через удаление самой группы. Удаление группы автоматически удаляет все её дочерние элементы.
const group = draw.group();
const rect = group.rect(50, 50).fill('#f90');
const circle = group.circle(40).fill('#09f');
// Удаление всей группы
group.remove();
После выполнения group.remove() ни прямоугольник, ни
круг не остаются в DOM, так как они являются частью удаляемой
группы.
Иногда требуется временно убрать элемент из DOM, но сохранить его для
последующего использования. В этом случае можно использовать метод
detach(). Он убирает элемент из DOM, но
сохраняет объект в памяти.
const rect = draw.rect(100, 50).fill('#f0f');
const detached = rect.detach();
// Позже элемент можно вставить обратно
draw.add(detached);
Метод detach() полезен при динамическом управлении
интерфейсом, когда элементы нужно скрывать и повторно использовать без
пересоздания.
Перед вызовом remove() или detach()
желательно проверять, существует ли элемент в DOM, чтобы избежать
ошибок:
if (circle && circle.node) {
circle.remove();
}
circle.node указывает на существующий DOM-узел. Если
элемент уже был удалён, свойство node будет
null.
SVG.js поддерживает цепочку методов, что позволяет объединять операции удаления с другими действиями:
draw.circle(80).fill('#fa0').animate(500).scale(0.5).after(function() {
this.remove();
});
В данном примере после завершения анимации элемент автоматически удаляется из DOM.
clear() на
контейнерах эффективнее по производительности, чем удаление каждого
дочернего элемента отдельно.detach() полезен для реализации временных
анимационных эффектов без пересоздания элементов.element.node перед удалением предотвращает
возможные ошибки при динамических операциях с DOM.<g> являются удобным инструментом для
массового удаления и управления коллекциями элементов.Удаление элементов в SVG.js — гибкий и мощный инструмент, который позволяет управлять графикой динамически, экономя ресурсы и упрощая архитектуру приложения.