Руководства · 01
Переходы
Каждый компонент принимает один transition: кривую timing или пружину. Как выбирать и что происходит, когда движение прерывают.
Два вида переходов
Переход — это либо { duration, easing }, либо { tempo: 'spring', spring }. Передайте его в проп transition любого компонента. Компоненты, которые двигают несколько вещей сразу, принимают второй проп, например layoutTransition у MotionList для элементов, переезжающих на новые места.
// Timing: a duration and a curve.
{ duration: 300, easing: 'easeOut' }
{ duration: 600, easing: [0.22, 1, 0.36, 1] }
// Spring: physics that keeps its speed when interrupted.
{ tempo: 'spring', spring: { stiffness: 260, damping: 12 } }
// Spring with duration: calibrated to settle exactly then.
{ tempo: 'spring', spring: { stiffness: 260, damping: 12 }, duration: 500 }Пружины с длительностью
Обычно пружина длится столько, сколько требует её физика. Добавьте duration, и пружина будет откалибрована так, чтобы остановиться ровно в этот момент, сохранив характер (насколько она пружинит) и уложившись в ваш тайминг. Ниже можно сравнить кривые timing и пружины на одних и тех же трёх компонентах.
Подготовка примера…
Прерывания
Каждый компонент начинает новое движение с того, что на экране. Пружина ещё и сохраняет текущую скорость, поэтому второе нажатие плавно разворачивает движение. Кривая timing начинается заново с текущей позиции с новой кривой.
- Числа: новое значение продолжается с глифов на экране.
- Высота и смены: размер продолжается с размера на экране.
- Списки: элементы, переезжающие на новое место, сохраняют скорость.
Готовые переходы
motionTokens собирает несколько согласованных ощущений: четыре пружины, четыре кривые timing и четыре длительности. Это обычные объекты, поэтому разверните один, чтобы изменить одно поле.
import { motionTokens } from '@kkwaenggwari/animated-chorus';
motionTokens.spring.quick; // snappy UI feedback
motionTokens.spring.basic; // the default feel
motionTokens.spring.gentle; // panels and height
motionTokens.spring.bouncy; // playful numbers
motionTokens.easing.expoOut; // { duration: 420, easing: 'expoOut' }
motionTokens.duration.fast; // 140Имена easing
easing принимает linear, in, out, inOut, ease, easeIn, easeOut, easeInOut, expoOut, backOut или массив кубической кривой Безье, например [0.22, 1, 0.36, 1].