Gidsen · 04

Invoer en gebaren

Schrijf aanwijzer, slepen, scrollen en andere invoer naar waarden, en laat andere waarden die volgen.

input(target, adapter)

Een invoeradapter zet browserevents om in schrijfacties naar waarden. input(ref, adapter) koppelt hem als controller; gedeclareerd binnen useAnimated wordt hij verwijderd bij unmount of als een afhankelijkheid verandert.

Adapters: dragInput, pinchInput, moveInput, scrollInput, wheelInput, viewportInput, mediaInput, longPressInput en swipeInput.

Voorbeeld voorbereiden…

Slepen met grenzen en beweging na loslaten

dragInput ondersteunt slepen met de aanwijzer en de pijltjestoetsen, bounds met elastic-weerstand, momentum na loslaten en een settle-functie die de rustplek kiest op basis van de verwachte positie.

Op touchscreens zet hij de touch-action van het doel zolang het gemount is, zodat de browser het gebaar niet als scrollen opvat. Een waarde die je zelf instelt, wint.

Voorbeeld voorbereiden…

Knijpen, viewport en media

Het optionele derde argument van input krijgt elk reactie-event, zodat een adapter ook beweging kan starten aan zijn randen.

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

Event-mappings uit React Native werken op DOM-events. Bij een scroll-event worden nativeEvent.contentOffset, contentSize en layoutMeasurement gelezen van het gescrolde element, zodat ScrollView-mappings ongewijzigd overkomen.

Header.jsx
const scrollY = useAnimatedValue(0);

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

Zoeken

Typ om de documentatie te doorzoeken.