Толщина обводки (stroke-width) в SVG напрямую влияет на визуальное восприятие анимации, создаваемой библиотекой Vivus, хотя сама логика построения анимации основана не на толщине линии, а на длине пути и управлении свойствами stroke-dasharray и stroke-dashoffset.
В SVG каждая линия задаётся через атрибут stroke-width,
который определяет визуальную толщину контура:
<path d="M10 10 L200 10" stroke="black" stroke-width="2" fill="none"/>
При увеличении значения толщина линии растёт симметрично относительно геометрического пути. Это означает, что центр линии остаётся на координатах пути, а расширение происходит наружу и внутрь одновременно.
Для Vivus это критично, поскольку библиотека анимирует не саму геометрию, а процесс «проявления» обводки через маскирование dash-параметров.
Vivus переводит каждый SVG path в последовательность длины линии и управляет её отображением через установку:
stroke-dasharray = totalLengthstroke-dashoffset = totalLength → 0new Vivus('my-svg', {
type: 'oneByOne',
duration: 200,
animTimingFunction: Vivus.EASE
});
Внутренне происходит эквивалент:
path.style.strokeDasharray = pathLength;
path.style.strokeDashoffset = pathLength;
и затем постепенное уменьшение stroke-dashoffset.
Важно: stroke-width не влияет на
pathLength, но влияет на визуальную плотность анимации.
Хотя математически длина пути не меняется, визуальная интерпретация сильно зависит от толщины:
При использовании Vivus толстые обводки часто дают более «пластичный» результат, особенно в логотипах и иллюстрациях с упрощённой геометрией.
При анимации stroke-dashoffset важно учитывать, что:
Это связано с тем, что перекрытие штриха становится заметным до
полного достижения stroke-dashoffset = 0.
На восприятие анимации через Vivus сильно влияют дополнительные SVG-атрибуты:
<path
d="..."
stroke="black"
stroke-width="8"
stroke-linecap="round"
stroke-linejoin="round"
/>
butt — резкое окончание, подчёркивает «техническую»
природу анимацииround — создаёт ощущение непрерывного рисованияsquare — визуально удлиняет путь, что может слегка
искажать ощущение скоростиmiter — резкие углы, подходит для геометрических
логотиповround — сглаживание соединений, уменьшает визуальные
разрывыbevel — компромиссный вариант для стилизованных
формВ Vivus-анимации именно сочетание
stroke-width + linecap + linejoin определяет характер
«почерка» SVG.
Кривые Безье в SVG при анимации Vivus могут демонстрировать артефакты:
Это особенно заметно в элементах с высокой кривизной:
Толщина фактически выступает как визуальный «антиалиасинг второго уровня», компенсирующий неточности raster-to-vector конвертации.
SVG масштабируется через viewBox, и толщина обводки
ведёт себя по-разному в зависимости от настройки:
<svg viewBox="0 0 200 200">
<path vector-effect="non-scaling-stroke"/>
Для Vivus использование non-scaling-stroke часто делает
анимацию более предсказуемой при адаптивных макетах.
Хотя stroke-width напрямую не влияет на вычисление dash-параметров, он косвенно влияет на производительность рендеринга:
В анимациях Vivus с десятками элементов рекомендуется:
Типичная конфигурация:
new Vivus('logo', {
type: 'delayed',
duration: 180,
start: 'autostart',
animTimingFunction: Vivus.EASE_OUT
});
SVG:
<svg viewBox="0 0 300 100">
<path
d="M10 80 C 40 10, 65 10, 95 80 S 150 150, 180 80"
stroke="black"
stroke-width="6"
fill="none"
stroke-linecap="round"
stroke-linejoin="round"
/>
</svg>
При такой конфигурации:
Толщина обводки формирует разные типы анимационного поведения:
Распространённые проблемы:
Хотя Vivus анимирует исключительно длину path, человеческое восприятие интерпретирует толщину как фактор скорости:
Это связано с тем, что визуальная масса объекта влияет на когнитивное ощущение движения, даже при одинаковом времени выполнения dash-offset интерполяции.