delayedРежим delayed в библиотеке Vivus предназначен для
последовательной отрисовки SVG-элементов с контролируемой задержкой
между отдельными путями (path). В отличие от синхронной или
асинхронной анимации, здесь каждый следующий элемент начинает
анимироваться не сразу после предыдущего, а с заданной паузой.
Основная идея заключается в создании эффекта «рисования по очереди», где каждый контур SVG появляется строго после завершения или почти завершения предыдущего, формируя визуально упорядоченный поток анимации.
SVG-документ внутри Vivus разбивается на набор независимых
графических сегментов — путей (path, line,
polyline, circle и другие элементы,
преобразуемые в path).
В режиме delayed для каждого такого сегмента
вычисляется:
getTotalLength)Далее создаётся временная шкала, где каждый элемент получает собственный стартовый offset.
Ключевая характеристика:
Базовая конфигурация:
new Vivus('my-svg', {
type: 'delayed',
duration: 200,
delay: 50
});
Параметры:
type: 'delayed' — включает последовательную анимацию с
задержкамиduration — общее время анимации (распределяется между
элементами)delay — интервал между стартами анимации каждого
следующего pathВ режиме delayed Vivus решает задачу распределения
времени следующим образом:
nT[ t_i = i delay]
Если задержка слишком велика относительно duration,
возникает эффект «разрыва» анимации, когда часть элементов может не
успеть завершиться в заданном временном окне.
При увеличении количества SVG-путей режим delayed
начинает проявлять характерные особенности:
delaydelay появляется эффект
«ступенчатого рисования»Оптимизация обычно сводится к подбору баланса между
duration и delay.
Порядок отрисовки строго соответствует порядку элементов в DOM-структуре SVG.
Пример:
<svg id="my-svg">
<path d="M10 10 L100 10" />
<path d="M100 10 L100 100" />
<path d="M100 100 L10 100" />
</svg>
В режиме delayed последовательность будет строго
линейной:
Изменение порядка в SVG напрямую влияет на визуальный сценарий анимации.
delay управляет интервалом запуска анимации каждого
следующего элемента.
delay: 100
При увеличении значения:
При уменьшении:
syncВнутренняя логика распределения времени основана на соотношении:
duration — общий бюджет времениdelay — фиксированная задержка между стартамиЕсли:
duration = 200
delay = 80
и количество элементов велико, возможна ситуация:
[ n delay > duration]
В этом случае Vivus перераспределяет временные интервалы, сокращая фактическую длительность анимации отдельных элементов.
Хотя delayed в первую очередь определяет временную
структуру старта анимаций, внутри каждого path применяется
easing-функция (если задана).
Пример:
new Vivus('my-svg', {
type: 'delayed',
duration: 150,
delay: 30,
animTimingFunction: Vivus.EASE
});
Влияние easing:
Vivus позволяет отслеживать прогресс анимации, что особенно полезно в
delayed режиме.
new Vivus('my-svg', {
type: 'delayed',
duration: 300,
delay: 40,
onReady: function () {
console.log('SVG загружен');
},
onFrame: function (progress) {
console.log(progress);
}
});
Особенности:
onFrame вызывается с общей прогрессией всей
последовательностиdelayed режиме прогресс растёт ступенчатоПеред использованием режима delayed критично важно
учитывать структуру SVG:
<g>) могут влиять на порядок обходаОптимизированный SVG:
В режиме delayed наблюдаются характерные эффекты:
delayРежим delayed часто применяется для:
Особенно эффективно работает на SVG с логической последовательностью элементов, где порядок отрисовки соответствует смысловой структуре изображения.