Vivus распространяется как самостоятельный JavaScript-файл и может быть подключён несколькими способами: через CDN, локальный файл или систему сборки модулей.
Через CDN:
<script src="https://cdn.jsdelivr.net/npm/vivus@latest/dist/vivus.min.js"></script>
Локальное подключение:
<script src="js/vivus.min.js"></script>
Использование с npm:
npm install vivus
import Vivus from 'vivus';
При использовании модульных сборщиков (например, Webpack или Vite) важно убедиться, что SVG-файлы корректно обрабатываются и доступны в DOM.
Vivus работает только с inline SVG, а не с
<img> или background-image.
Корректный вариант:
<svg id="my-svg" viewBox="0 0 200 200">
<path d="M10 10 L190 10 L190 190 L10 190 Z" />
</svg>
Некорректный вариант:
<img src="image.svg">
Ключевые требования к SVG:
<path>, <line>,
<polyline>, <polygon>,
<circle> или <rect><g>), тем проще
управлять анимациейСоздание экземпляра Vivus — основной шаг запуска анимации:
new Vivus('my-svg');
Где 'my-svg' — это id SVG-элемента.
По умолчанию:
delayedПолная сигнатура конструктора:
new Vivus(element, options, callback);
1. element
new Vivus(document.getElementById('my-svg'));
2. options
3. callback
Определяет способ прорисовки SVG:
new Vivus('my-svg', {
type: 'delayed'
});
Доступные значения:
Количество кадров анимации:
new Vivus('my-svg', {
duration: 200
});
Чем больше значение, тем медленнее анимация.
Определяет, когда начинается анимация:
new Vivus('my-svg', {
start: 'autostart'
});
Возможные значения:
new Vivus('my-svg', {
delay: 50
});
Актуально для типов delayed и oneByOne.
new Vivus('my-svg', {
dashGap: 20
});
Контролирует расстояние между штрихами при анимации.
new Vivus('my-svg', {
forceRender: false
});
Используется для оптимизации производительности. Включение может помочь при проблемах с отрисовкой.
new Vivus('my-svg', {
reverseStack: true
});
Меняет порядок отрисовки элементов на обратный.
Функция, выполняемая после завершения анимации:
new Vivus('my-svg', {}, function () {
console.log('Анимация завершена');
});
Можно использовать для:
При использовании start: 'manual' требуется явный
запуск:
const animation = new Vivus('my-svg', {
start: 'manual'
});
animation.play();
Дополнительные методы:
animation.stop();
animation.reset();
animation.finish();
new Vivus('my-svg', {
start: 'inViewport'
});
Vivus отслеживает прокрутку страницы и запускает анимацию, когда SVG становится видимым.
Важно:
display: noneДля сложных анимаций можно управлять каждым элементом через HTML:
<path d="..." data-start="0" data-duration="20"></path>
<path d="..." data-start="30" data-duration="10"></path>
Инициализация:
new Vivus('my-svg', {
type: 'scenario'
});
Параметры:
Важно гарантировать, что SVG уже присутствует в документе:
document.addEventListener('DOMContentLoaded', function () {
new Vivus('my-svg');
});
Или:
window.onl oad = function () {
new Vivus('my-svg');
};
Разница:
DOMContentLoaded — быстрее, не ждёт загрузки
изображенийwindow.onload — ждёт полной загрузки страницыЕсли SVG динамически изменяется, требуется пересоздание экземпляра:
let vivus = new Vivus('my-svg');
// позже
vivus.reset().play();
Или полностью:
vivus = new Vivus('my-svg');
1. SVG не inline
<img>2. Неверный id
new Vivus('wrong-id'); // ошибка
3. SVG отсутствует в DOM
4. Отсутствие путей
<g>, анимации не
будет5. display: none
<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/vivus@latest/dist/vivus.min.js"></script>
</head>
<body>
<svg id="my-svg" viewBox="0 0 100 100">
<path d="M10 10 L90 10 L90 90 L10 90 Z" stroke="black" fill="none"/>
</svg>
<script>
new Vivus('my-svg', {
duration: 150,
type: 'oneByOne'
});
</script>
</body>
</html>
options