Руководства · 01

Переходы

Каждый компонент принимает один transition: кривую timing или пружину. Как выбирать и что происходит, когда движение прерывают.

Два вида переходов

Переход — это либо { duration, easing }, либо { tempo: 'spring', spring }. Передайте его в проп transition любого компонента. Компоненты, которые двигают несколько вещей сразу, принимают второй проп, например layoutTransition у MotionList для элементов, переезжающих на новые места.

transitions.js
// 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 и четыре длительности. Это обычные объекты, поэтому разверните один, чтобы изменить одно поле.

tokens.js
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].

Поиск

Начните вводить, чтобы искать в документации.