Vivus — небольшая JavaScript-библиотека для анимации SVG, создающая эффект «рисования» линий. Подключается через CDN или локальный файл:
<script src="https://unpkg.com/vivus@latest/dist/vivus.min.js"></script>
Либо установка через пакетный менеджер:
npm install vivus
Импорт в модульной среде:
import Vivus from 'vivus';
Создание анимации происходит через конструктор Vivus,
который принимает три аргумента:
new Vivus(element, options, callback);
Параметры:
element — DOM-элемент или его id,
содержащий SVGoptions — объект настроек анимацииcallback — функция, вызываемая после завершения
анимацииПример:
new Vivus('my-svg', {
duration: 200,
type: 'delayed'
});
Элемент можно передавать разными способами:
new Vivus('my-svg'); // по id
new Vivus(document.getElementById('my-svg')); // через DOM
SVG должен быть встроен в HTML, а не загружен через
<img>.
typeОпределяет способ анимации:
delayed — линии рисуются с задержкой друг за
другомsync — все линии анимируются одновременноoneByOne — строгая последовательностьscenario — управление через атрибуты SVGscenario-sync — синхронизированная версия сценарияПример:
type: 'oneByOne'
durationОбщая длительность анимации (в кадрах, не в миллисекундах):
duration: 200
Чем больше значение — тем медленнее рисование.
startОпределяет момент запуска:
inViewport — при попадании в область видимостиmanual — запуск вручнуюautostart — автоматически после загрузкиstart: 'autostart'
delayЗадержка между элементами:
delay: 50
Используется в режимах delayed и
oneByOne.
dashGapКонтролирует расстояние между штрихами:
dashGap: 10
Полезно для настройки визуального эффекта линии.
forceRenderПринудительная перерисовка SVG на каждом кадре:
forceRender: false
Увеличивает точность, но снижает производительность.
reverseStackМеняет порядок анимации элементов:
reverseStack: true
Анимация начинается с последнего элемента SVG.
selfDestroyУдаляет все служебные атрибуты после завершения:
selfDestroy: true
Упрощает DOM после анимации.
Функция вызывается после завершения анимации:
new Vivus('my-svg', {}, function (obj) {
console.log('Анимация завершена');
});
Аргумент obj — экземпляр Vivus.
Экземпляр Vivus предоставляет методы:
play(speed)Запуск или продолжение анимации:
vivus.play();
vivus.play(2); // ускорение
stop()Остановка:
vivus.stop();
reset()Сброс состояния:
vivus.reset();
finish()Мгновенное завершение:
vivus.finish();
setFrameProgress(progress)Установка прогресса вручную (от 0 до 1):
vivus.setFrameProgress(0.5);
<svg id="icon" viewBox="0 0 100 100">
<path d="M10 10 L90 10 L90 90 L10 90 Z" />
</svg>
<script>
var animation = new Vivus('icon', {
type: 'delayed',
duration: 150,
start: 'autostart'
}, function () {
console.log('Готово');
});
</script>
<path>,
<line>, <polyline>,
<polygon>)fill) не анимируютсяstroke-width) влияет на визуальный
результатdocument.querySelectorAll('.svg').forEach(function(el) {
new Vivus(el, { duration: 100 });
});
oneByOne для контролируемой нагрузкиforceRender, если нет необходимости<img> не поддерживаетсяstrokeВ режиме scenario можно управлять анимацией через
атрибуты:
<path data-start="0" data-duration="20" />
data-start — момент началаdata-duration — длительностьЭто позволяет гибко контролировать порядок и тайминг без JS.
var vivus = new Vivus('my-svg', {
start: 'manual'
});
// позже
vivus.play();
Скорость регулируется коэффициентом:
vivus.play(0.5); // медленно
vivus.play(3); // быстро
new Vivus('logo', {
type: 'oneByOne',
duration: 300,
delay: 20,
dashGap: 5,
reverseStack: true
});
Позволяет создавать сложные и выразительные анимации при минимальном коде.