Список функций плавности

Функции плавности (easing) в Velocity.js определяют характер изменения анимации во времени, задавая зависимость между прогрессом выполнения и фактическим значением анимируемого свойства. Именно они отвечают за ощущение «естественности» движения: ускорение, замедление, упругость, резкие шаги или линейное изменение.

В основе любой анимации лежит функция:

t → f(t), где

  • t — нормализованное время от 0 до 1
  • f(t) — преобразованное значение прогресса

Velocity.js принимает easing как строку, массив или специальный идентификатор, преобразуя его в математическую функцию интерполяции.


Самая простая форма изменения значений — отсутствие ускорения и замедления.

linear

Изменение происходит равномерно на всём протяжении анимации.

Velocity(element, { left: "500px" }, { easing: "linear" });

Особенности:

  • постоянная скорость
  • отсутствует ускорение
  • используется в технических или интерфейсных анимациях, где важна предсказуемость

Базовые кривые плавности

Velocity.js поддерживает стандартные easing-строки, совместимые с jQuery UI и CSS-анимациями.

ease

Универсальная плавность, близкая к cubic-bezier(0.25, 0.1, 0.25, 1)

  • мягкий старт
  • мягкое завершение
  • универсальное поведение по умолчанию
Velocity(element, { opacity: 1 }, { easing: "ease" });

ease-in

Разгон в начале анимации и стабильное движение дальше.

  • медленный старт
  • ускорение к середине

Подходит для появления объектов из состояния покоя.


ease-out

Быстрое начало и плавное завершение.

  • мгновенный старт
  • постепенное торможение

Используется для исчезновения или завершения движения.


ease-in-out

Комбинированная кривая ускорения и замедления.

  • медленно стартует
  • ускоряется в середине
  • замедляется к концу

Наиболее «естественная» форма движения в интерфейсах.


Расширенные функции (классические easing-кривые)

Velocity.js поддерживает набор более детализированных математических функций, часто совпадающих с jQuery UI easing.

Линейные степени

easeInQuad, easeOutQuad, easeInOutQuad

Квадратичные кривые обеспечивают более выраженное ускорение.

  • Quad = t²
Velocity(element, { top: "300px" }, { easing: "easeInQuad" });

Характер:

  • более резкое ускорение по сравнению с базовыми ease
  • используется для динамичных интерфейсных переходов

easeInCubic, easeOutCubic, easeInOutCubic

Кубические кривые:

  • Cubic = t³

Особенности:

  • более «глубокая» инерция
  • заметное ускорение/замедление

easeInQuart, easeOutQuart, easeInOutQuart

Четвёртая степень:

  • очень выраженная инерция
  • резкое изменение скорости

Применение:

  • эффектные UI-переходы
  • анимации, требующие драматичности

easeInQuint, easeOutQuint, easeInOutQuint

Пятая степень:

  • максимально резкие кривые среди стандартных
  • быстрое ускорение или торможение

Тригонометрические функции плавности

Эти функции используют синусоидальные кривые для максимально «органичного» движения.

easeInSine, easeOutSine, easeInOutSine

  • основаны на sin(x)
  • создают мягкие волнообразные изменения скорости

Особенности:

  • визуально наиболее естественные
  • подходят для интерфейсов с «живым» поведением

easeInExpo, easeOutExpo, easeInOutExpo

Экспоненциальные кривые:

  • почти мгновенное изменение скорости
  • резкие переходы

Характер:

  • dramatic UI transitions
  • эффекты появления/исчезновения

easeInCirc, easeOutCirc, easeInOutCirc

Круговые функции:

  • основаны на геометрии окружности
  • плавное ускорение с ощущением физической инерции

Пружинная физика

spring

Velocity.js поддерживает физически-ориентированную модель движения, имитирующую пружину.

Velocity(element, { translateY: "200px" }, { easing: "spring" });

Особенности:

  • переразгон (overshoot)
  • колебания вокруг целевого значения
  • затухание амплитуды

Модель поведения:

  • сила упругости
  • коэффициент демпфирования
  • инерция массы

Используется для:

  • интерактивных интерфейсов
  • drag-and-drop систем
  • реалистичных UI-эффектов

Шаговая функция (steps easing)

steps(n, direction)

Дискретная функция, разбивающая анимацию на фиксированное количество шагов.

Velocity(element, { width: "300px" }, { easing: "steps(10, end)" });

Параметры:

  • n — количество шагов

  • direction:

    • start — скачок в начале шага
    • end — скачок в конце шага

Поведение:

  • отсутствие плавности
  • ступенчатое изменение значений

Применение:

  • pixel-art анимации
  • UI-индикаторы
  • симуляция дискретных процессов

Кастомные кривые Безье

Velocity.js позволяет использовать собственные cubic-bezier кривые, задаваемые массивом из четырёх чисел.

Velocity(element, { opacity: 1 }, {
  easing: [0.17, 0.67, 0.83, 0.67]
});

Структура:

  • x1, y1 — первая контрольная точка
  • x2, y2 — вторая контрольная точка

Свойства:

  • полный контроль над динамикой движения
  • эквивалент CSS cubic-bezier

Типичные значения:

  • [0.25, 0.1, 0.25, 1] — стандартная плавность
  • [0.42, 0, 0.58, 1] — ease-in-out

Смешанные и нестандартные easing-режимы

Velocity.js допускает использование сторонних easing-плагинов и пользовательских функций.

Функция как easing

Velocity(element, { scale: 2 }, {
  easing: function (t) {
    return Math.pow(t, 3) * Math.sin(t * Math.PI);
  }
});

Поведение:

  • полный контроль разработчика
  • возможность создания уникальных физических моделей

Взаимодействие easing с параметрами анимации

Easing не существует изолированно. Он влияет на:

  • длительность анимации
  • амплитуду изменений
  • восприятие скорости

При увеличении duration:

  • кривые становятся более выраженными
  • эффект ускорения/замедления усиливается

При уменьшении duration:

  • easing становится менее заметным
  • движение выглядит более «жёстким»

Комбинирование нескольких easing в цепочках анимации

Velocity.js позволяет создавать последовательности анимаций, где каждая стадия использует свою кривую:

Velocity(element, { top: "100px" }, { easing: "easeInQuad" })
  .then(() =>
    Velocity(element, { top: "0px" }, { easing: "easeOutBounce" })
  );

Характер:

  • первая стадия задаёт импульс
  • вторая завершает движение с эффектом отскока

Поведенческие различия групп easing

Мягкие кривые

  • ease
  • easeInOutSine
  • easeInOutQuad

Используются для интерфейсов и UI-анимаций.

Резкие кривые

  • easeInExpo
  • easeOutExpo
  • easeInQuint

Используются для акцентных эффектов.

Физические модели

  • spring

Используются для имитации реального мира.

Дискретные модели

  • steps

Используются для технических визуализаций.


Влияние easing на UX-ощущение

Разные кривые напрямую меняют восприятие интерфейса:

  • ускорение в начале создаёт ощущение «отдачи»
  • замедление в конце формирует ощущение завершённости
  • симметричные кривые воспринимаются как нейтральные
  • пружинные эффекты добавляют «живость» интерфейсу