Выберите драйвер, комбинируйте несколько и точно знайте, что происходит, когда один из них останавливают или заменяют.
timing, spring и decay
timing следует кривой фиксированной длительности duration. spring следует физике и не имеет фиксированной длительности. decay начинает с заданной скорости и замедляется.
Те же драйверы принимают число, ValueXY или запись, поэтому { x, y, opacity } могут двигаться вместе.
Подготовка примера…
Параметры пружины
Используйте одну параметризацию. Без неё вы получите пружину React Native по умолчанию (tension 40, friction 7). velocity пружины по умолчанию равна скорости траектории, которую она прерывает.
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.