すべてのコンポーネント

MotionHeight

高さが中身に追従します。折りたたみ、展開、内容の変化。

WebReact Native内容とサイズ

試してみる

サンプルを準備中…

いちばん短い使い方

Details.jsx
<button onClick={() => setOpen(!open)}>Details</button>
<MotionHeight open={open}>
  <Answer />
</MotionHeight>

代わりに処理してくれること

  • 自動で計測した、中身の実際の高さへアニメーションします。
  • 開いている間に中身が増えたり減ったりしても追従します。
  • 変化の途中でも、画面上の高さから始まります。
  • ページのサイズを変えたときは、新しい幅に遅れて追いかけず、すぐに合わせます。
  • 閉じた中身はマウントされたまま非表示・操作不可になるので、状態は保たれます。

こんなときに

  • FAQ の回答。
  • 開閉する設定のグループ。
  • 合計の高さをアニメーションさせたいリスト(MotionList を包みます)。

props

Prop型デフォルト説明
openbooleantruefalse で高さ 0 まで折りたたみます。中身はマウントされたまま非表示・操作不可になります。
childrenReactNode中身。
aselement'div'描画する要素。
transitionTransitionspringタイミングカーブ { duration, easing } かスプリング { tempo: 'spring', spring }。スプリングは中断されても勢いを保ちます。
onMotionComplete(open) => void高さが落ち着いた後に、open を受け取って実行されます。

ほかの props は描画される要素に渡るので、className、style、イベントハンドラーはいつもどおり使えます。

Web と React Native

Web では高さを Web Animations API で再生し、中身は通常のレイアウトのままです。

React Native ではビューが中身をクリップし、高さはレイアウトなので JS ドライバーでアニメーションします。

使っているサンプル

検索

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