Guías · 04

Entrada y gestos

Escribe el puntero, el arrastre, el scroll y otras entradas en valores, y haz que otros valores los sigan.

input(target, adapter)

Un adaptador de entrada convierte eventos del navegador en escrituras de valores. input(ref, adapter) lo conecta como controlador; declarado dentro de useAnimated, se quita al desmontar o cuando cambia una dependencia.

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

Preparando el ejemplo…

Arrastre con límites y movimiento al soltar

dragInput admite arrastre con puntero y con flechas del teclado, bounds con resistencia elastic, momentum al soltar y una función settle que elige el punto de reposo a partir de la posición proyectada.

En pantallas táctiles fija el touch-action del elemento mientras está montado para que el navegador no tome el gesto como scroll. Un valor que pongas tú tiene prioridad.

Preparando el ejemplo…

Pellizco, viewport y media queries

El tercer argumento opcional de input recibe cada evento de respuesta, así que un adaptador también puede iniciar movimiento en sus flancos.

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

Los mapeos de eventos de React Native funcionan con eventos DOM. En un evento de scroll, nativeEvent.contentOffset, contentSize y layoutMeasurement se leen del elemento desplazado, así que los mapeos de ScrollView se portan sin cambios.

Header.jsx
const scrollY = useAnimatedValue(0);

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

Buscar

Escribe para buscar en la documentación.