Guider · 04
Inmatning och gester
Skriv pekare, dragning, scrollning och annan inmatning till värden, och låt andra värden följa dem.
input(target, adapter)
En inmatningsadapter gör om webbläsarhändelser till skrivningar av värden. input(ref, adapter) kopplar in den som en controller; deklarerad inuti useAnimated tas den bort vid unmount eller när ett beroende ändras.
Adaptrar: dragInput, pinchInput, moveInput, scrollInput, wheelInput, viewportInput, mediaInput, longPressInput och swipeInput.
Förbereder exemplet…
Dra med gränser och rörelse efter släpp
dragInput stöder dragning med pekare och piltangenter, bounds med elastic-motstånd, momentum efter släpp och en settle-funktion som väljer viloplatsen utifrån den förväntade positionen.
På pekskärmar sätter den målets touch-action medan den är monterad, så att webbläsaren inte tar gesten för scrollning. Ett värde du själv sätter vinner.
Förbereder exemplet…
Nyp, viewport och media
Det valfria tredje argumentet till input tar emot varje svarshändelse, så en adapter kan också starta rörelse vid sina kanter.
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
Händelsemappningar från React Native fungerar på DOM-händelser. Vid en scrollhändelse läses nativeEvent.contentOffset, contentSize och layoutMeasurement från det scrollade elementet, så ScrollView-mappningar flyttas över oförändrade.
const scrollY = useAnimatedValue(0);
<div onScroll={Animated.event([{ nativeEvent: { contentOffset: { y: scrollY } } }])} />;