ガイド · 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 つずつ受け取るので、アダプターのエッジでモーションを開始することもできます。

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

React Native のイベントマッピングが DOM イベントでも動きます。スクロールイベントでは nativeEvent.contentOffset、contentSize、layoutMeasurement をスクロールされた要素から読むので、ScrollView のマッピングがそのまま移植できます。

Header.jsx
const scrollY = useAnimatedValue(0);

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

検索

入力するとドキュメントを検索します。