가이드 · 04
입력과 제스처
포인터, 드래그, 스크롤 같은 입력을 값에 쓰고, 다른 값이 그것을 뒤따르게 합니다.
input(target, adapter)
입력 어댑터는 브라우저 이벤트를 값 쓰기로 바꿉니다. input(ref, adapter)는 그것을 컨트롤러로 붙이며, useAnimated 안에서 선언하면 언마운트나 의존성 변경 때 제거됩니다.
어댑터: dragInput, pinchInput, moveInput, scrollInput, wheelInput, viewportInput, mediaInput, longPressInput, swipeInput.
예제를 준비하는 중…
경계와 놓은 뒤 모션이 있는 드래그
dragInput은 포인터와 방향키 드래그, elastic 저항이 있는 bounds, 놓은 뒤의 momentum, 예상 위치로 멈출 곳을 고르는 settle 함수를 지원합니다.
터치 화면에서는 브라우저가 제스처를 스크롤로 가져가지 않도록 마운트 동안 대상의 touch-action을 설정합니다. 직접 지정한 값이 우선합니다.
예제를 준비하는 중…
핀치, 뷰포트, 미디어
input의 세 번째 인자는 반응 이벤트를 받으므로 어댑터의 가장자리에서 모션을 시작할 수도 있습니다.
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
React Native 이벤트 매핑이 DOM 이벤트에서 동작합니다. 스크롤 이벤트에서는 nativeEvent.contentOffset, contentSize, layoutMeasurement를 스크롤된 요소에서 읽으므로 ScrollView 매핑이 그대로 옮겨집니다.
const scrollY = useAnimatedValue(0);
<div onScroll={Animated.event([{ nativeEvent: { contentOffset: { y: scrollY } } }])} />;