Посібники · 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.

Пошук

Почніть вводити, щоб шукати в документації.