В основе работы Vivus лежит обработка SVG-элементов, а именно путей
(<path>), которые описываются строкой в формате path
data. Это один из ключевых типов данных, с которыми работает
библиотека.
SVG-путь представляет собой строку, содержащую команды построения векторной геометрии:
M — перемещение пераL — линияC — кубическая кривая БезьеQ — квадратичная криваяZ — замыкание контураПример типичного значения:
"M10 10 L100 10 L100 100 L10 100 Z"
В Vivus такие строки используются как основной входной формат для анимации. Библиотека не преобразует геометрию, а оперирует уже готовым описанием пути.
SVG path data рассматривается как неизменяемая строка. Любое изменение структуры пути приводит к полной переработке анимации.
Ключевые свойства:
M vs
m)Числа используются в конфигурации Vivus для управления поведением анимации. Это всегда JavaScript Number, без дополнительных преобразований.
Основные параметры:
duration: 200
Тип: number
Определяет общее время анимации в условных единицах кадров или миллисекунд (в зависимости от реализации таймера внутри Vivus).
Часто косвенно выражается через параметры задержек, но всегда сводится к числовым значениям:
Хотя Vivus не изменяет стили напрямую, числовые значения могут влиять на восприятие анимации:
stroke-width: 2;
Числа в SVG остаются частью DOM-структуры, а не внутреннего состояния библиотеки.
Boolean используется для переключения режимов поведения анимации и оптимизации отрисовки.
Типичные флаги:
selfDestroy: true
или
start: false
Логические значения применяются для:
Особенность заключается в том, что boolean не имеет промежуточных состояний — либо включено, либо выключено, что делает их критичными для управления жизненным циклом анимации.
Основная конфигурация Vivus передаётся в виде объекта. Это центральный тип данных, который объединяет все остальные.
new Vivus('my-svg', {
type: 'delayed',
duration: 200,
start: 'autostart'
});
Объект конфигурации содержит:
Каждое свойство строго типизировано на уровне логики библиотеки, хотя JavaScript не накладывает жёстких ограничений.
В некоторых расширенных реализациях допускаются вложенные объекты:
{
animTiming: {
delay: 0,
duration: 200
}
}
Хотя базовая версия Vivus чаще использует плоскую структуру, концепция объектных конфигураций остаётся основной.
Vivus активно использует строковые перечисления для задания режимов работы. Это один из ключевых типов данных, определяющий стратегию анимации.
type: 'delayed'
Возможные значения:
delayedsynconeByOnescenarioscenario-syncКаждое значение изменяет алгоритм построения анимации:
Строки здесь выступают как псевдоперечисления, заменяя полноценные enum-структуры.
Функции используются для расширения поведения и обработки событий жизненного цикла анимации.
onReady: function () {
// логика инициализации
}
или
onComplete: function () {
// завершение анимации
}
Функции принимают управление в ключевых точках:
Vivus работает не только с одиночными путями, но и с коллекциями элементов SVG.
Тип данных:
paths: [path1, path2, path3]
Каждый элемент массива — это DOM-узел <path> или
его аналог.
<g>SVG-элементы передаются в Vivus в виде DOM-объектов.
Пример:
document.querySelector('#my-svg')
или:
element.querySelectorAll('path')
Vivus извлекает из них:
getTotalLength()getAttribute('d')DOM-узел здесь выступает как источник данных, а не просто визуальный элемент.
Внутри работы библиотеки формируются массивы чисел, отражающие длины сегментов путей.
Пример логической структуры:
lengths = [120.5, 300.0, 89.3]
Эти данные используются для:
Vivus оперирует временными значениями, которые могут быть представлены:
delay: 0
duration: 200
или вычисляемые значения:
step = totalDuration / numberOfSegments
JavaScript-значения undefined и null также
встречаются в конфигурациях Vivus.
Используется при отсутствии параметра:
start: undefined
означает применение значения по умолчанию.
Используется реже, но может означать:
Vivus не выполняет строгую типизацию, поэтому часто происходит неявное преобразование:
"200"0 и
1Пример:
duration: "200"
будет интерпретирован как число.
В реальных сценариях Vivus использует комбинации типов:
{
type: 'oneByOne',
duration: 300,
start: 'autostart',
onReady: function () {},
selfDestroy: true
}
Здесь одновременно присутствуют:
Такая смесь типов формирует гибкую конфигурационную модель без строгих ограничений, но с логической типизацией на уровне поведения библиотеки.