Параметр жесткости (stiffness) в библиотеке
Popmotion определяет, насколько «сильной» является сила, возвращающая
значение к целевой точке в анимации на основе пружины
(spring). Это ключевой элемент физической модели, влияющий
на скорость и характер движения.
Жесткость напрямую связана с законом Гука: чем выше значение, тем быстрее система стремится вернуться к равновесию.
В основе spring-анимаций лежит приближённая физическая модель:
Жесткость определяет силу пружины:
import { animate } from "popmotion";
animate({
from: 0,
to: 100,
type: "spring",
stiffness: 200,
onUpdate: v => console.log(v)
});
Здесь значение stiffness: 200 задаёт достаточно упругую
пружину с быстрым возвратом к цели.
stiffness: 80
Характер движения:
stiffness: 150
Используется в большинстве интерфейсных анимаций.
stiffness: 500
Характер движения:
animate({
to: 100,
type: "spring",
stiffness: 300,
damping: 10
});
Результат:
Масса влияет на инерцию:
animate({
to: 100,
type: "spring",
stiffness: 300,
mass: 2
});
animate({
from: 1,
to: 1.2,
type: "spring",
stiffness: 250,
damping: 15
});
animate({
from: dragPosition,
to: 0,
type: "spring",
stiffness: 150,
damping: 20
});
animate({
to: 100,
type: "spring",
stiffness: 120,
damping: 8,
mass: 1.5
});
Жесткость воспринимается пользователем не напрямую, а через:
Примеры:
| stiffness | Ощущение |
|---|---|
| 50 | вязкое, мягкое |
| 150 | естественное |
| 400 | резкое, механическое |
stiffness: 500,
damping: 5
Проблема:
stiffness: 20
Проблема:
Даже при правильной stiffness:
stiffness: 200,
mass: 5
Результат:
Подбор параметров чаще всего происходит эмпирически:
Начальное значение:
stiffness: 100Постепенное увеличение:
Балансировка через damping
Жесткость напрямую влияет на восприятие интерфейса:
Низкая stiffness Подходит для:
Средняя stiffness Подходит для:
Высокая stiffness Подходит для:
Практически используемые значения:
120–250150–30050–120200–400animate({
to: 100,
type: "spring",
stiffness: 300,
damping: 25
});
animate({
to: 100,
type: "spring",
stiffness: 180,
damping: 8
});
animate({
to: 100,
type: "spring",
stiffness: 90,
damping: 20
});