SVG в веб-анимации редко существует как набор изолированных линий. Почти всегда это система вложенных элементов, где логика построения изображения определяется структурой документа: слоями, группами, повторяющимися фрагментами и семантическим разделением. В Vivus именно эта структура становится ключевым инструментом управления анимацией, поскольку библиотека работает не с абстрактными «объектами сцены», а напрямую с DOM-элементами SVG.
Группировка элементов через <g> внутри SVG не
просто организационный приём. Она формирует иерархию, которую Vivus
использует при обходе DOM-дерева и последовательной анимации путей. При
правильном проектировании групп можно управлять логикой появления
элементов, изолировать части иллюстрации и задавать предсказуемый
порядок отрисовки.
SVG-документ представляет собой дерево, в котором каждый графический
элемент является узлом. Vivus при инициализации проходит по этому дереву
и собирает все элементы <path>, пригодные для
анимации.
Группы <g> не являются самостоятельными
анимируемыми объектами, но выполняют роль контейнеров:
При этом сам механизм анимации остаётся ориентированным на пути
(path). Это означает, что группировка не изменяет способ
рисования, но меняет структуру последовательности, если элементы вложены
корректно.
Vivus по умолчанию анимирует пути в порядке их появления в DOM. Это
означает, что положение <g> в структуре SVG напрямую
влияет на последовательность анимации.
Рассмотрим логическую структуру:
<svg>
<g id="layer-1">
<path d="..." />
<path d="..." />
</g>
<g id="layer-2">
<path d="..." />
</g>
</svg>
В этом случае сначала будут обработаны все пути из
layer-1, затем из layer-2.
Группы выступают как «блоки последовательности». Это особенно важно при создании сложных иллюстраций, где необходимо визуально отделить этапы прорисовки.
Внутри одной группы порядок остаётся строго линейным. Однако Vivus
предоставляет механизм, который позволяет инвертировать глобальный
порядок анимации — параметр reverseStack.
При его использовании последовательность обхода DOM изменяется на обратную:
Это особенно полезно в сочетании с группами, когда требуется сохранить структуру, но изменить направление анимации.
SVG-иллюстрации часто состоят из функциональных блоков:
Разделение на <g> позволяет изолировать эти части,
сохраняя единый SVG-файл, но логически разделяя его на независимые
секции.
Пример структуры:
<svg>
<g id="outline">
<path d="..." />
<path d="..." />
</g>
<g id="details">
<path d="..." />
<path d="..." />
</g>
<g id="background">
<path d="..." />
</g>
</svg>
Vivus будет анимировать всё последовательно, но логическая группировка позволяет:
Одно из ключевых преимуществ группировки — возможность применения трансформаций:
translatescalerotateГруппы позволяют изменять положение набора путей без изменения их геометрии.
<g transform="translate(50, 0)">
<path d="..." />
</g>
Vivus при этом анимирует путь как обычно, но визуально он будет смещён вместе с группой.
Важно, что анимация stroke не зависит от трансформации группы — длина пути рассчитывается в исходных координатах, а затем отображается в трансформированном пространстве.
SVG допускает многоуровневую вложенность:
<g id="outer">
<g id="inner-1">
<path d="..." />
</g>
<g id="inner-2">
<path d="..." />
</g>
</g>
Vivus не различает уровень вложенности как отдельную семантическую сущность. Он «разворачивает» дерево в линейный список путей.
Это означает:
<path>Таким образом, глубокая вложенность полезна для архитектуры SVG, но не создаёт отдельной анимационной логики сама по себе.
Хотя Vivus не анимирует <g> как единый объект,
группировка позволяет синхронизировать поведение элементов через
организацию DOM.
Типичный сценарий:
syncВ режиме синхронной анимации элементы визуально воспринимаются как единый блок, если они:
Группы помогают гарантировать, что связанные элементы не будут разделены другими путями.
При создании сложных SVG-сцен группировка становится основным инструментом управления визуальной драматургией.
Пример архитектуры:
Такая структура позволяет заранее определить порядок:
Vivus при этом просто следует DOM-структуре, но правильная группировка превращает статический порядок в управляемый сценарий.
Группы не влияют на сам механизм рисования пути. Это означает:
<g>Любые эффекты на уровне групп достигаются только через:
В сложных интерфейсах часто применяется стратегия разделения SVG на логические части, каждая из которых инициализируется отдельно.
Структура:
Это позволяет:
Группы в этом случае используются как подготовительный этап архитектуры, а не как прямой механизм управления анимацией.
При большом количестве путей SVG может становиться трудно управляемым. Группы решают эту проблему на уровне структуры:
Vivus опирается на чистую структуру DOM, поэтому качество группировки напрямую влияет на предсказуемость анимации и её масштабируемость.