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

Ввод и жесты

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

input(target, adapter)

Адаптер ввода превращает события браузера в записи значений. input(ref, adapter) подключает его как контроллер; объявленный внутри useAnimated, он удаляется при размонтировании или изменении зависимости.

Адаптеры: dragInput, pinchInput, moveInput, scrollInput, wheelInput, viewportInput, mediaInput, longPressInput и swipeInput.

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

Перетаскивание с границами и движением после отпускания

dragInput поддерживает перетаскивание указателем и клавишами-стрелками, bounds с сопротивлением elastic, momentum после отпускания и функцию settle, которая выбирает место остановки по прогнозируемой позиции.

На сенсорных экранах он задаёт touch-action цели, пока смонтирован, чтобы браузер не принял жест за прокрутку. Значение, заданное вами, имеет приоритет.

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

Щипок, область просмотра и медиа

Необязательный третий аргумент input получает каждое событие ответа, поэтому адаптер может запускать движение и на своих границах.

inputs.jsx
const card = useRef(null);

const pinch = useAnimated(
  { scale: 1, rotation: 0 },
  (value) => {
    input(card, pinchInput({ scale: value.scale, rotation: value.rotation, minScale: 0.5 }));
  },
  [],
);

const reveal = useAnimated(
  0,
  (value) => {
    input(card, viewportInput({ once: true }), (event) => {
      if (event.phase === 'in') spring(value, { toValue: 1 }).start();
    });
  },
  [],
);

Animated.event

Сопоставления событий React Native работают с событиями DOM. В событии прокрутки nativeEvent.contentOffset, contentSize и layoutMeasurement читаются из прокручиваемого элемента, поэтому сопоставления ScrollView переносятся без изменений.

Header.jsx
const scrollY = useAnimatedValue(0);

<div onScroll={Animated.event([{ nativeEvent: { contentOffset: { y: scrollY } } }])} />;

Поиск

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