ガイド · 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 の 3 番目の引数(省略可能)は反応イベントを 1 つずつ受け取るので、アダプターのエッジでモーションを開始することもできます。
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 } } }])} />;