Guias · 04

Entrada e gestos

Grave ponteiro, arraste, rolagem e outras entradas em valores, e faça outros valores segui-los.

input(target, adapter)

Um adaptador de entrada transforma eventos do navegador em gravações de valores. input(ref, adapter) o conecta como controlador; declarado dentro de useAnimated, ele é removido na desmontagem ou quando uma dependência muda.

Adaptadores: dragInput, pinchInput, moveInput, scrollInput, wheelInput, viewportInput, mediaInput, longPressInput e swipeInput.

Preparando o exemplo…

Arraste com limites e movimento ao soltar

dragInput aceita arraste com ponteiro e com as setas do teclado, bounds com resistência elastic, momentum depois de soltar e uma função settle que escolhe o ponto de repouso a partir da posição projetada.

Em telas sensíveis ao toque, ele define o touch-action do elemento enquanto está montado, para que o navegador não trate o gesto como rolagem. Um valor que você mesmo definir tem prioridade.

Preparando o exemplo…

Pinça, viewport e media queries

O terceiro argumento opcional de input recebe cada evento de resposta, então um adaptador também pode iniciar movimento nas bordas dele.

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

Os mapeamentos de eventos do React Native funcionam com eventos DOM. Em um evento de rolagem, nativeEvent.contentOffset, contentSize e layoutMeasurement são lidos do elemento rolado, então os mapeamentos de ScrollView funcionam sem mudanças.

Header.jsx
const scrollY = useAnimatedValue(0);

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

Pesquisar

Digite para pesquisar na documentação.