すべてのコンポーネント
MotionPager
データから作るスワイプできるページ。オンボーディング、カルーセル、タブパネル。
WebReact Native選択とページ送り
試してみる
いちばん短い使い方
Onboarding.jsx<MotionPager
items={slides}
index={page}
onIndexChange={setPage}
gap={16}
renderItem={(slide) => <Slide slide={slide} />}
/>;
代わりに処理してくれること
- ページはスワイプやマウスのドラッグに追従し、端では抵抗し、離したときの速度で落ち着きます。
- フリックすれば必ず 1 ページめくれ、1 回のジェスチャーで 2 ページ以上めくれることはありません。
- トラックパッドの横スクロールでもページがめくれ、慣性の余韻は無視されます。
- ページャーにフォーカスがあれば矢印キー、Home、End が使え、縦スクロールもそのまま使えます。
- 表示中以外のページは操作できません。
こんなときに
- オンボーディングの流れ。
- 写真のカルーセル。
MotionHighlight と組み合わせた、スワイプできるタブパネル。
props
| Prop | 型 | デフォルト | 説明 |
|---|
items | readonly T[] | —必須 | データの配列。 |
|---|
index | number | | 表示するページ。省略するとページャーが自分で管理します。 |
|---|
defaultIndex | number | 0 | index を制御しないときの最初のページ。 |
|---|
onIndexChange | (index, item) => void | | スワイプ、キー、ホイールの操作でページが落ち着くとすぐに、インデックスと項目を受け取って実行されます。 |
|---|
getKey | (item) => string | number | item.id | 項目の一意で安定した key を返します。デフォルトは item.id、文字列や数値なら項目そのものです。 |
|---|
renderItem | (item, { index, active }) => ReactNode | item.label | ページを描画します。インデックスと、表示中かどうかを受け取ります。 |
|---|
gap | number | 0 | ページ間の間隔(ピクセル)。 |
|---|
itemClassName | string | | 各項目の要素のクラス。インラインスタイルは itemStyle で指定します。 |
|---|
transition | Transition | spring | タイミングカーブ { duration, easing } かスプリング { tempo: 'spring', spring }。スプリングは中断されても勢いを保ちます。 |
|---|
ほかの props は描画される要素に渡るので、className、style、イベントハンドラーはいつもどおり使えます。