Демпфирование определяет характер затухания колебаний в анимациях, основанных на физической модели пружины. В библиотеке Popmotion параметры демпфирования напрямую влияют на скорость стабилизации значения, наличие или отсутствие колебаний, а также «ощущение» инерции движения.
В основе лежит классическая модель гармонического осциллятора с затуханием, где движение определяется тремя ключевыми параметрами: жёсткость (stiffness), масса (mass) и демпфирование (damping). Именно параметр damping отвечает за силу сопротивления движению.
Демпфирование моделирует силы трения или сопротивления среды. Чем выше значение damping, тем быстрее система теряет энергию и тем быстрее прекращаются колебания.
Основные режимы поведения системы:
Недодемпфированная система (underdamped) Значение damping недостаточно велико. Возникают затухающие колебания вокруг целевого значения.
Критически демпфированная система (critically damped) Минимальное значение демпфирования, при котором система достигает цели максимально быстро без колебаний.
Передемпфированная система (overdamped) Слишком высокое значение damping. Движение становится медленным и «вязким», без колебаний.
В Popmotion параметр damping используется в анимации
типа spring:
import { spring } from "popmotion";
spring({
from: 0,
to: 100,
stiffness: 200,
damping: 10,
mass: 1
}).start(v => console.log(v));
Здесь:
stiffness — сила пружиныdamping — коэффициент демпфированияmass — масса объектаdamping: 5
Долгие колебания
Выраженный «пружинящий» эффект
Подходит для:
damping: 15
damping: 50
Демпфирование нельзя рассматривать изолированно. Оно работает в связке с другими параметрами.
stiffness + низкий damping →
резкие и пружинистые колебанияstiffness + высокий damping →
быстрое, но контролируемое движениеmass требует большего damping,
иначе колебания будут слишком сильнымиmass с высоким damping создаёт
эффект мгновенной остановкиПример:
spring({
from: 0,
to: 100,
stiffness: 150,
damping: 20,
mass: 2
});
Здесь увеличенная масса компенсируется более высоким демпфированием.
Критическое демпфирование — важное понятие при построении интерфейсов. Оно обеспечивает максимально быстрое достижение цели без визуальных колебаний.
В Popmotion нет явного параметра «critical damping», но его можно приблизительно вычислить:
Формула:
damping ≈ 2 * √(stiffness * mass)
Пример:
const stiffness = 100;
const mass = 1;
const damping = 2 * Math.sqrt(stiffness * mass);
spring({
from: 0,
to: 100,
stiffness,
damping,
mass
});
Такой подход используется для создания «чистых» и предсказуемых анимаций.
Для кнопок, модальных окон и панелей:
{
stiffness: 200,
damping: 20,
mass: 1
}
Для перетаскиваемых элементов:
{
stiffness: 300,
damping: 30,
mass: 0.8
}
{
stiffness: 100,
damping: 8,
mass: 2
}
В сложных сценариях damping может изменяться во время анимации. Это позволяет моделировать, например, изменение среды (воздух → вода).
Пример:
let damping = 10;
const animation = spring({
from: 0,
to: 100,
stiffness: 150,
damping
}).start(v => {
if (v > 50) {
damping = 30;
}
});
Параметр damping влияет не только на визуальное поведение, но и на длительность анимации:
При оптимизации интерфейсов предпочтительно избегать слишком «долгих» колебаний.
1. Слишком низкое демпфирование
damping: 1
2. Слишком высокое демпфирование
damping: 100
3. Игнорирование mass
Баланс между mass и damping критичен.
Изменение одного параметра без учёта другого приводит к непредсказуемым
результатам.
В CSS нет прямого аналога демпфирования. Кривые
cubic-bezier лишь имитируют поведение, но не моделируют
физику:
Демпфирование даёт возможность создавать естественные взаимодействия, которые сложно воспроизвести стандартными средствами CSS.
| Эффект | stiffness | damping | mass |
|---|---|---|---|
| Прыгающий мяч | 300 | 5 | 1 |
| Плавное появление | 150 | 20 | 1 |
| Тяжёлый объект | 100 | 25 | 3 |
| Мгновенная остановка | 200 | 40 | 1 |
Демпфирование напрямую влияет на восприятие интерфейса:
Корректный выбор параметра позволяет передать характер продукта через движение.