Пружины для различных сценариев

В Popmotion пружинная анимация строится на модели затухающего гармонического колебания, где движение объекта определяется не фиксированным временем, а параметрами физической системы. Такой подход позволяет создавать естественные переходы, которые автоматически адаптируются к начальным условиям, скорости и сопротивлению.

Ключевая идея заключается в том, что объект стремится к целевому состоянию, но проходит через него с возможными колебаниями в зависимости от параметров жесткости, демпфирования и массы.


Базовая модель spring-анимации

В Popmotion пружина задаётся через функцию spring, которая возвращает спецификацию анимации с физическими параметрами:

  • stiffness — жёсткость пружины
  • damping — коэффициент демпфирования
  • mass — масса объекта
  • velocity — начальная скорость
  • from / to — начальное и конечное значение

Физически модель можно интерпретировать как систему:

  • сила стремится вернуть объект в точку равновесия
  • сопротивление среды уменьшает колебания
  • масса определяет инерцию движения

Основные параметры и их влияние

Жёсткость (stiffness)

Высокая жёсткость приводит к быстрым, резким движениям. Низкая — к мягким и медленным переходам.

  • высокая stiffness: интерфейс реагирует резко
  • низкая stiffness: плавные и “вязкие” движения

Демпфирование (damping)

Контролирует затухание колебаний.

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

Критическое демпфирование достигается при балансе, когда объект быстро приходит в точку цели без oscillation.


Масса (mass)

Масса определяет инерционность системы.

  • большая масса → медленный старт и остановка
  • малая масса → быстрый отклик

Начальная скорость (velocity)

Важный параметр, который делает spring-анимации зависимыми от предыдущего движения.

Например, при drag-интеракции скорость передаётся из пользовательского движения, создавая инерционный эффект продолжения движения после отпускания.


Поведение spring-системы в Popmotion

Spring-анимации в Popmotion не ограничены временем. Это ключевое отличие от tween-анимаций.

Вместо фиксированного duration используется критерий остановки:

  • скорость падает ниже порога
  • расстояние до цели становится минимальным

Эти условия контролируются через:

  • restSpeed
  • restDelta

Сценарий: интерфейсные переходы

Пружины часто используются в UI для создания естественных переходов:

  • появление модальных окон
  • раскрытие панелей
  • анимация dropdown-меню

При использовании spring для модального окна важно учитывать:

  • высокая stiffness создаёт “поп-эффект”
  • умеренное damping предотвращает дрожание
  • малый mass ускоряет появление интерфейса

Типичный профиль:

  • stiffness: средний–высокий
  • damping: средний
  • mass: низкий

Сценарий: drag and throw (перетаскивание)

Одно из наиболее естественных применений spring — инерционные движения после drag.

Система работает следующим образом:

  1. во время drag фиксируется скорость движения
  2. при отпускании эта скорость передаётся в spring
  3. объект продолжает движение к цели с затуханием

Это создаёт эффект физического “броска”.

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

  • velocity становится ключевым параметром
  • damping регулирует “скольжение”
  • stiffness определяет силу возврата к границам

Сценарий: возврат в исходное положение

Spring часто используется для возврата элемента после неправильного действия:

  • свайп отменён
  • drag вышел за пределы
  • интерактивный элемент сброшен

В этом случае:

  • to = начальная позиция
  • stiffness повышается для ускоренного возврата
  • damping увеличивается для подавления колебаний

Сценарий: микроанимации интерфейса

Микроинтеракции требуют тонкой настройки пружин:

  • hover эффекты
  • нажатия кнопок
  • переключатели

Здесь важна отзывчивость:

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

Такие настройки создают ощущение “живого” интерфейса, где элементы слегка реагируют на действия пользователя.


Сценарий: синхронизация нескольких spring-анимаций

Popmotion позволяет запускать несколько пружин одновременно с разными параметрами, создавая сложные каскады движений.

Пример сценариев:

  • последовательное появление элементов списка
  • волновая анимация карточек
  • синхронные переходы UI-компонентов

Особенность заключается в том, что каждая пружина работает автономно, но может использовать общий источник скорости или общего триггера запуска.


Сценарий: границы и ограничения движения

Spring часто комбинируется с логикой ограничения значений:

  • clamp по оси X/Y
  • ограничение масштабирования
  • фиксация углов вращения

В таких системах пружина работает как механизм “подтягивания” объекта к допустимым значениям.

Если объект выходит за пределы:

  • создаётся возвращающая сила
  • damping увеличивается для предотвращения вибраций
  • stiffness регулирует скорость возврата

Поведение при разных комбинациях параметров

Высокая stiffness + низкий damping

  • резкие колебания
  • эффект “резиновой” системы
  • возможен overshoot

Низкая stiffness + высокий damping

  • медленное движение
  • отсутствие колебаний
  • “вязкое” поведение интерфейса

Средние значения всех параметров

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

Интеграция spring в поток анимаций Popmotion

Spring может использоваться как самостоятельная анимация или как часть цепочки transform-процессов:

  • входное значение → spring → преобразование → render
  • комбинация с easing-функциями (в гибридных сценариях)
  • связывание нескольких свойств одного элемента

Особенно эффективно применение spring в реактивных системах, где каждое изменение состояния вызывает новую физическую симуляцию.


Поведение при остановке системы

Spring-анимация завершает выполнение не по времени, а по достижению состояния покоя.

Критерии:

  • скорость стремится к нулю
  • отклонение от цели минимально

Эта модель обеспечивает стабильность даже при сложных цепочках анимаций, исключая необходимость ручного контроля длительности.