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

Timing, пружины и композиция

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

timing, spring и decay

timing следует кривой фиксированной длительности duration. spring следует физике и не имеет фиксированной длительности. decay начинает с заданной скорости и замедляется.

Те же драйверы принимают число, ValueXY или запись, поэтому { x, y, opacity } могут двигаться вместе.

Подготовка примера…

Параметры пружины

Используйте одну параметризацию. Без неё вы получите пружину React Native по умолчанию (tension 40, friction 7). velocity пружины по умолчанию равна скорости траектории, которую она прерывает.

springs.js
spring(value, { toValue: 1 }); // React Native default
spring(value, { toValue: 1, stiffness: 260, damping: 20 }); // physical
spring(value, { toValue: 1, bounciness: 8, speed: 12 }); // React Native style
spring(value, { toValue: 1, tension: 40, friction: 7 }); // origami style

Композиция

sequence выполняет по очереди, parallel — одновременно, stagger запускает каждый с задержкой, delay ждёт, а loop повторяет. Результат — снова контроллер, поэтому композиции вкладываются.

Подготовка примера…

start, stop и reset

У каждого контроллера есть start(callback?), stop() и reset(). Колбэк получает { finished }: false, если движение остановили или заменили.

Запуск нового драйвера на том же значении заменяет текущий с текущей позиции. Никаких прыжков к одному из концов.

controller.js
const move = timing(value, { toValue: 1, duration: 600 });

move.start(({ finished }) => {
  // finished is false when stopped or replaced by a new animation
});
move.stop(); // keeps the value where it is on screen
move.reset(); // returns to where this animation started

Следование за другим значением

Живой toValue перезапускает драйвер при каждом изменении этого значения, как tracking в React Native. follow(target, source) — то же пружинное соединение в виде именованной функции.

tracking.js
// A live toValue tracks another value, like React Native tracking.
spring(badge, { toValue: pointer, stiffness: 300, damping: 26 }).start();

// follow() is the same connection as a named function.
follow(badge, pointer, { stiffness: 300, damping: 26 });

Easing и ключевые кадры

Easing совпадает с React Native: linear, quad, cubic, sin, circle, exp, elastic, back, bounce, bezier и помощники in, out, inOut. keyframes(value, frames, options) проводит одно значение через несколько чисел с необязательными times и repeat.

Поиск

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