В библиотеке Vivus управление временем анимации SVG строится вокруг
концепции кадровой длительности и распределения рисования по элементам
DOM. В отличие от CSS-анимаций, где основой служат секунды, здесь
ключевая единица — количество кадров, что напрямую связывает поведение
анимации с циклом requestAnimationFrame.
Основной принцип заключается в том, что вся анимация SVG рассматривается как последовательность дискретных шагов.
Ключевая особенность:
Это означает, что одинаковое значение длительности может восприниматься по-разному на разных устройствах, если нагрузка влияет на FPS.
Центральный параметр управления скоростью —
duration.
Он задаётся при создании экземпляра Vivus:
new Vivus('svg-id', {
duration: 200
});
Смысл duration:
Поведение можно интерпретировать так:
Важно учитывать, что Vivus не нормализует время в секунды, поэтому визуальная длительность зависит от FPS.
При условных 60 FPS можно приблизительно оценить длительность:
Однако эта зависимость не фиксирована.
Факторы, влияющие на реальную длительность:
Vivus предлагает несколько стратегий распределения отрисовки путей
SVG. Они напрямую влияют на то, как именно расходуется
duration.
При режиме синхронной анимации все элементы получают одинаковую долю времени.
new Vivus('svg-id', {
duration: 200,
type: 'sync'
});
Поведение тайминга:
Здесь время делится последовательно между элементами.
new Vivus('svg-id', {
duration: 200,
type: 'oneByOne'
});
Особенности распределения:
Если в SVG 10 элементов и duration = 200, то средняя длительность одного элемента ≈ 20 кадров.
Модель с распределёнными задержками:
new Vivus('svg-id', {
duration: 200,
type: 'delayed'
});
Принцип:
SVG документ состоит из множества контуров, и Vivus работает на
уровне каждого path.
Внутренне происходит:
Ключевой момент: длинные пути не обязательно получают больше времени — это зависит от режима анимации.
Каждый path имеет свою геометрию, и Vivus использует длину линии для расчёта прогресса.
При равномерном распределении:
Vivus поддерживает функции временного распределения (easing), которые управляют тем, как прогресс изменяется внутри duration.
Пример:
new Vivus('svg-id', {
duration: 200,
animTimingFunction: Vivus.EASE
});
При линейной функции:
Это базовая модель, часто используемая для технических иллюстраций.
При использовании easing:
Это создаёт эффект естественного движения пера.
Отдельно может применяться функция к каждому path:
В сложных иллюстрациях это позволяет выделять важные элементы через ускорение или замедление их прорисовки.
Хотя duration определяет общую длительность, момент
старта контролируется отдельно.
new Vivus('svg-id', {
duration: 200,
start: 'autostart'
});
Возможные режимы запуска:
const anim = new Vivus('svg-id', {
duration: 200,
start: 'manual'
});
anim.play();
Это позволяет синхронизировать анимацию с:
В сложных интерфейсах duration становится частью общей системы тайминга UI.
Типичные сценарии:
Изменение duration влияет не только на скорость, но и на восприятие формы SVG.
Чем больше path в SVG:
При сложных иллюстрациях часто требуется увеличение duration для сохранения плавности.
При работе с крупными SVG структурами важны следующие подходы:
oneByOne для управляемого ритмаТак как Vivus привязан к кадрам:
Это важно учитывать при анимациях в тяжёлых интерфейсах или на мобильных устройствах.
При одновременной работе нескольких экземпляров Vivus:
Часто применяется единый «мастер-таймер» для согласования поведения.