Guides · 04

Entrées et gestes

Écrire le pointeur, le glisser, le défilement et d’autres entrées dans des valeurs, et faire suivre ces valeurs par d’autres.

input(target, adapter)

Un adaptateur d’entrée transforme les événements du navigateur en écritures de valeurs. input(ref, adapter) l’attache comme contrôleur ; déclaré dans useAnimated, il est retiré au démontage ou quand une dépendance change.

Adaptateurs : dragInput, pinchInput, moveInput, scrollInput, wheelInput, viewportInput, mediaInput, longPressInput et swipeInput.

Préparation de l’exemple…

Glisser avec limites et mouvement au relâchement

dragInput gère le glisser au pointeur et aux flèches du clavier, des bounds avec une résistance elastic, le momentum après relâchement et une fonction settle qui choisit le point de repos à partir de la position projetée.

Sur écran tactile, il définit le touch-action de la cible pendant qu’il est monté pour que le navigateur ne prenne pas le geste pour un défilement. Une valeur que vous définissez vous-même l’emporte.

Préparation de l’exemple…

Pincement, viewport et media queries

Le troisième argument facultatif de input reçoit chaque événement de réponse : un adaptateur peut donc aussi lancer un mouvement sur ses fronts.

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

Les mappings d’événements de React Native fonctionnent avec les événements DOM. Sur un événement de défilement, nativeEvent.contentOffset, contentSize et layoutMeasurement sont lus sur l’élément défilé : les mappings de ScrollView se portent tels quels.

Header.jsx
const scrollY = useAnimatedValue(0);

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

Rechercher

Tapez pour rechercher dans la documentation.