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.
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.
const scrollY = useAnimatedValue(0);
<div onScroll={Animated.event([{ nativeEvent: { contentOffset: { y: scrollY } } }])} />;