Vivus — легковесная JavaScript-библиотека для анимации SVG, создающая эффект «рисования» линий. Установка возможна несколькими способами в зависимости от архитектуры проекта.
Использование менеджера пакетов npm — стандартный способ для современных проектов.
npm install vivus
После установки библиотека становится доступной в
node_modules и может быть импортирована в код:
import Vivus from 'vivus';
При использовании сборщиков (например, Webpack, Vite или Parcel) импорт автоматически включается в итоговый бандл.
Альтернативный способ установки:
yarn add vivus
Импорт аналогичен:
import Vivus from 'vivus';
Для быстрого прототипирования или небольших проектов библиотека может быть подключена напрямую через CDN.
<script src="https://cdn.jsdelivr.net/npm/vivus@latest/dist/vivus.min.js"></script>
После подключения объект Vivus становится доступен в
глобальной области видимости:
new Vivus('my-svg');
Vivus работает только с inline SVG, встроенными непосредственно в
HTML. Использование <img> или
background-image не поддерживается.
Пример корректной структуры:
<svg id="my-svg" viewBox="0 0 200 200">
<path d="M10 10 H 190 V 190 H 10 Z" />
</svg>
Ключевые требования:
<path>viewBox обязателен для корректного
масштабированияМинимальный пример подключения:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Vivus Example</title>
</head>
<body>
<svg id="my-svg" viewBox="0 0 200 200">
<path d="M10 10 H 190 V 190 H 10 Z" />
</svg>
<script src="https://cdn.jsdelivr.net/npm/vivus@latest/dist/vivus.min.js"></script>
<script>
new Vivus('my-svg');
</script>
</body>
</html>
В проектах с использованием ES-модулей или сборщиков структура подключения отличается.
import Vivus from 'vivus';
document.addEventListener('DOMContentLoaded', () => {
new Vivus('my-svg', {
duration: 200
});
});
Особенности:
Признаки успешного подключения:
Типичные ошибки:
1. SVG не анимируется
<img> вместо inline
SVG2. Ошибка Vivus is not defined
3. Ничего не происходит
id у SVG или он не совпадает с
переданным в VivusРекомендуемая структура проекта:
project/
│
├── index.html
├── js/
│ └── main.js
├── svg/
│ └── illustration.svg
└── package.json
Если SVG хранится в отдельном файле, его необходимо вставить в HTML:
Пример динамической загрузки:
fetch('/svg/illustration.svg')
.then(response => response.text())
.then(data => {
document.body.insertAdjacentHTML('beforeend', data);
new Vivus('my-svg');
});
Самый простой вариант:
new Vivus('my-svg');
Расширенный вариант:
new Vivus('my-svg', {
type: 'delayed',
duration: 150,
start: 'autostart'
});
Для нескольких анимаций создаются отдельные экземпляры:
new Vivus('svg1');
new Vivus('svg2');
new Vivus('svg3');
Либо через цикл:
['svg1', 'svg2', 'svg3'].forEach(id => {
new Vivus(id);
});
Инициализация должна происходить после полной загрузки SVG:
document.addEventListener('DOMContentLoaded', function () {
new Vivus('my-svg');
});
Или при использовании модулей:
window.onl oad = function () {
new Vivus('my-svg');
};
Для корректной загрузки скриптов можно использовать атрибут
defer:
<script src="vivus.min.js" defer></script>
<script src="main.js" defer></script>
Это гарантирует выполнение скриптов после построения DOM.
В средах React, Vue или Angular подключение выполняется через npm, а инициализация — в жизненном цикле компонента.
Пример для React:
import { useEffect } from 'react';
import Vivus from 'vivus';
function App() {
useEffect(() => {
new Vivus('my-svg');
}, []);
return (
<svg id="my-svg">
<path d="..." />
</svg>
);
}
id