В Vivus система сглаживания (ease-функции) определяет характер
изменения анимации во времени при прорисовке SVG-путей. Вместо
равномерного линейного движения обводки по контуру используется
математическая функция, трансформирующая параметр прогресса
t ∈ [0,1], позволяя управлять ускорением, замедлением и
динамикой визуального эффекта.
Ease-функции в контексте Vivus влияют не только на визуальную плавность, но и на восприятие «рисования» SVG: одинаковая длительность анимации при разных функциях может восприниматься радикально по-разному — от механического и предсказуемого до органического и «живого».
Любая ease-функция формально задаётся отображением:
f(t) → t'
где:
t — нормализованное время анимации (0 в начале, 1 в
конце)t' — скорректированное значение прогрессаВ контексте анимации SVG-пути это значение определяет, какая часть длины пути уже «прорисована».
Линейная функция задаётся как:
f(t) = t
и соответствует равномерной скорости отрисовки. Однако визуально такая анимация часто воспринимается как неестественная.
Линейная функция остаётся базовой точкой отсчёта:
f(t) = t
Она применяется, когда требуется строгая синхронизация с временной шкалой, например при технических визуализациях или при согласовании с аудио/видео таймингом.
Однако при работе с SVG-контурами возникает эффект «механического пера», особенно на сложных формах. Это связано с тем, что равномерное изменение длины пути не учитывает визуальную сложность участков кривой.
В большинстве систем анимации используются кривые Безье третьего порядка или их аппроксимации.
f(t) = t^2
Характер:
В SVG-анимации это создаёт эффект «разгона пера», когда линия сначала едва заметна, а затем быстро завершает контур.
f(t) = 1 - (1 - t)^2
Характер:
Визуально создаёт ощущение аккуратного «дорабатывания» формы, часто используется для подчёркивания финальных деталей SVG-иконок.
f(t) = 3t^2 - 2t^3
Характер:
Такая функция наиболее универсальна для рисования сложных SVG-путей, так как симметрично распределяет динамику.
Внутренняя логика Vivus разделяет процесс анимации на два уровня:
Ease-функции могут применяться к каждому уровню отдельно.
Типичная конфигурация включает:
type: стратегия прорисовки (delayed,
sync, oneByOne)duration: общая длительностьanimTimingFunction: функция времениpathTimingFunction: функция распределения по длине
путиПри типе delayed каждый SVG-путь получает собственную
задержку. Ease-функция в этом случае влияет на глобальное время, но
визуально особенно заметна в начале и конце всей композиции.
Пример поведения:
В режиме sync все пути анимируются одновременно, но
easing влияет на распределение длины прорисовки.
Функции ускорения создают эффект неравномерного заполнения контура:
В режиме последовательной отрисовки ease-функции влияют на переходы между путями.
Ease-in-out здесь наиболее естественен, поскольку:
Одним из ключевых механизмов является преобразование прогресса вдоль длины пути.
Если без easing путь заполняется равномерно:
progress = t * length
то при применении функции:
progress = f(t) * length
изменяется скорость прохождения конкретных сегментов SVG-кривой.
Это приводит к эффекту «перераспределения времени» по геометрии:
В Vivus допускается использование пользовательских функций,
принимающих t и возвращающих преобразованное значение.
Пример:
new Vivus('svg', {
duration: 200,
type: 'oneByOne',
animTimingFunction: function (t) {
return Math.pow(t, 3);
}
});
Кубическая функция усиливает эффект инерции:
Другой вариант — синусоидальная кривая:
function easeInOutSine(t) {
return -(Math.cos(Math.PI * t) - 1) / 2;
}
Такая функция используется для создания естественного «дыхания» анимации.
SVG-пути неоднородны по своей природе: они состоят из линий, кривых Безье, дуг. Easing-функции не изменяют геометрию, но влияют на временное распределение прорисовки.
При сложных формах возникает эффект:
Особенно заметно это при работе с логотипами и иконографикой, где важна визуальная «чистота» движения.
Внутри систем, построенных на Vivus, выбор функции обычно зависит от цели анимации:
Некорректное применение функций приводит к визуальным артефактам:
Нормализация обязательна:
0 ≤ f(t) ≤ 1
Любое отклонение нарушает корректную отрисовку SVG-прогресса.
Хотя ease-функции являются математическими преобразованиями, их выбор влияет на нагрузку косвенно:
В системах с сотнями элементов SVG оптимизация easing становится частью общей стратегии производительности анимационного движка.