Неправильное подключение библиотеки — одна из самых частых причин, по которой анимация не запускается или работает нестабильно. Vivus не требует сложной конфигурации, но строго зависит от того, как именно подключён SVG и когда происходит инициализация.
Подключение библиотеки не тем способом
Vivus может использоваться как через CDN, так и через сборщики модулей. Ошибка возникает, когда разработчик смешивает подходы: подключает скрипт как глобальный, но пытается использовать его как ES-модуль или наоборот.
При глобальном подключении должно быть доступно:
<script src="vivus.min.js"></script>
и только после этого:
new Vivus('my-svg', { duration: 200 });
При использовании модулей часто забывают, что библиотека может быть не установлена как зависимость проекта или импортируется некорректно:
import Vivus from 'vivus';
Ошибка проявляется как Vivus is not defined или
Vivus is not a constructor.
Попытка анимации внешнего SVG-файла через
Vivus работает только с DOM-элементом SVG, а не с изображением как ресурсом. Одна из ключевых ошибок — использование конструкции:
<img src="image.svg" id="my-svg">
В таком случае библиотека не получает доступ к внутренним
<path> элементам, и анимация невозможна.
Корректный вариант:
<svg id="my-svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200">
<path d="..." />
</svg>
Vivus работает только с inline SVG, так как требуется прямой доступ к DOM-узлам путей.
Инициализация до загрузки DOM
Часто экземпляр Vivus создаётся до того, как SVG присутствует в DOM.
В результате querySelector внутри библиотеки возвращает
null.
Типичный сценарий ошибки:
new Vivus('my-svg', { duration: 150 });
при размещении скрипта в <head> без ожидания
загрузки страницы.
Решение заключается в гарантии наличия элемента:
document.addEventListener('DOMContentLoaded', () => {
new Vivus('my-svg', { duration: 150 });
});
или размещение скрипта перед закрывающим
</body>.
Несовпадение идентификаторов и селекторов
Vivus принимает либо ID элемента, либо DOM-ссылку. Ошибки возникают при:
Пример проблемного кода:
<svg id="logo-animation"></svg>
new Vivus('logo_animaton', { duration: 200 });
В этом случае библиотека не найдёт элемент и не выдаст визуального эффекта, а ошибка может остаться незамеченной.
SVG без корректных path-элементов
Vivus анимирует только контуры (<path>,
<line>, <polyline>,
<polygon>). Если SVG состоит исключительно из:
<rect><circle><image>анимация либо не произойдёт, либо будет выглядеть как «ничего не происходит».
Дополнительно проблема возникает, когда пути объединены в один сложный shape без корректных stroke-данных.
Отсутствие stroke и stroke-dasharray поведения
Vivus визуально имитирует рисование через работу с обводкой. Если SVG изначально не содержит stroke или он скрыт через CSS, эффект может быть незаметен.
Проблемный CSS:
path {
stroke: none;
}
Или:
path {
stroke: transparent;
}
Также вмешательство fill без обводки часто создаёт
впечатление отсутствия анимации.
Запуск на скрытых элементах
Одна из неочевидных ошибок — инициализация Vivus на элементе с
display: none.
display: none;
}
В этом случае библиотека не может корректно вычислить размеры и длины путей, что приводит к некорректной инициализации.
Аналогичная проблема возникает при:
visibility: hiddenПовторная инициализация одного SVG
Vivus не предназначен для многократного создания экземпляров на одном и том же SVG без сброса состояния. Типичная ошибка:
new Vivus('my-svg', { duration: 100 });
new Vivus('my-svg', { duration: 200 });
Результат — конфликт анимаций, утечки памяти или непредсказуемое поведение.
Некорректный выбор типа анимации
Параметр type определяет стратегию отрисовки. Ошибки
возникают при передаче неподдерживаемых значений или неверном понимании
поведения.
Поддерживаемые режимы:
delayedsynconeByOneПередача случайных строк приводит к падению логики или переходу к дефолтному режиму без предупреждения.
Проблемы с параметром duration
duration ожидает числовое значение. Часто встречается
ошибка передачи строки:
new Vivus('my-svg', { duration: "200" });
В результате вычисления временных интервалов становятся некорректными, анимация либо не запускается, либо завершается мгновенно.
Ошибки при работе в SPA (React, Vue, Angular)
В одностраничных приложениях Vivus часто инициализируется до того, как компонент с SVG реально смонтирован в DOM.
Типичная ошибка:
Проблема проявляется как null-селектор или неработающая
анимация после рендера.
Дополнительно важно учитывать повторные рендеры: без очистки старых экземпляров создаются дубли анимаций.
SVG-спрайты и символы <use>
Vivus не всегда корректно работает с SVG, собранными через
<symbol> и <use>, поскольку
реальные пути могут находиться вне текущего DOM-узла.
Ошибка выглядит как:
Ошибки при серверном рендеринге
При использовании SSR (например, Next.js) попытка создать экземпляр
Vivus на сервере приводит к ошибке, так как отсутствует
window и DOM.
Типичный симптом:
ReferenceError: window is not defined
Инициализация должна происходить только на клиенте.
Изменение SVG после инициализации
Если DOM-структура SVG меняется после создания экземпляра Vivus (например, через JS или динамическую загрузку), библиотека не пересчитывает пути автоматически.
Это приводит к состоянию, когда:
Конфликты CSS-трансформаций
Применение transform, scale,
rotate к SVG или его контейнеру до инициализации может
исказить расчёт длины пути. Особенно критично:
transform: scale(0)transform: translateZ(0) в некоторых старых
браузерахОшибки из-за отсутствия viewBox
SVG без viewBox часто приводит к некорректному
масштабированию и вычислению длины путей.
<svg width="200" height="200">
В таком случае поведение может отличаться в разных браузерах, и визуальная анимация становится нестабильной.
Несоответствие координат при импортированных SVG
SVG, экспортированные из графических редакторов, часто содержат:
<g>Vivus может корректно обработать структуру, но анимация выглядит «ломаной» из-за некорректного расчёта пути.
Итоговая природа большинства проблем
Большинство ошибок инициализации связано не с самой библиотекой, а с несоответствием ожиданий:
Правильная структура DOM и контроль момента создания экземпляра являются ключевыми условиями корректной работы анимации.