Motion

Motionは、MotionにYamada UIのStyle Propsを拡張した便利なコンポーネントです。

使い方

import { Motion } from "@yamada-ui/react"
  • initial: コンポーネントの初期状態。
  • animate: コンポーネントがマウントされた時や更新された時に実行されるアニメーション。
  • exit: コンポーネントがアンマウントされた時に実行されるアニメーション。
  • transition: 所用時間や遅延時間を設定するオブジェクト。

バリアント

バリアントを設定すると、動的なアニメーションの実装に便利です。他にもアニメーションをオーケストレーションすることも可能です。

Look at me!

AnimatePresenceを使う

Reactでは、コンポーネントがアンマウントされた時、アニメーションは維持されません。AnimatePresenceを使用することで、アニメーションが終了するまでコンポーネントはアンマウントされません。

キーフレーム

値を配列にすることで、キーフレームを設定できます。各フレームは、均等な間隔で処理されます。transitiontimesに間隔を設定した配列を設定するとオーバーライドできます。

ジェスチャー

ホバークリック・タップフォーカスを検出し、アニメーションを実行することができます。

ホバー

  • whileHover: ポインターがコンポーネント上を移動したときに実行されるアニメーション。
  • onHoverStart: ポインターがコンポーネント上を移動したときに実行されるコールバック関数。
  • onHoverEnd: ポインターがコンポーネントから離れたときに実行されるコールバック関数。
Hover me!

クリック・タップ

  • whileTap: ポインターがコンポーネントをクリックまたはタップしたときに実行されるアニメーション。
  • onTapStart: ポインターがコンポーネントを押し始めたときに実行されるコールバック関数。
  • onTap: ポインターがコンポーネントの押し下げをキャンセルし、コンポーネント内でポインターが解放されたときに実行されるコールバック関数。
  • onTapCancel: ポインターがコンポーネントの押し下げをキャンセルし、コンポーネント外でポインターが解放されたときに実行されるコールバック関数。
Click and Tap me!

フォーカス

  • whileFocus: コンポーネントがフォーカスされたときに実行されるアニメーション。
Focus me!

ドラッグ

コンポーネントのドラッグを有効にする場合は、dragtrueに設定します。または"x"または"y"を設定することで、x軸またはy軸のみを追従します。

  • whileDrag: コンポーネントがドラッグされたときに実行されるアニメーション。
  • onDrag: コンポーネントがドラッグ中に実行されるコールバック関数。
  • onDragStart: コンポーネントがドラッグを開始したときに実行されるコールバック関数。
  • onDragEnd: コンポーネントがドラッグを終了したときに実行されるコールバック関数。
Drag me!
Only X
Only Y

可能領域を制限する

可能領域を制限する場合は、dragConstraintstopbottomleftrightに値(ピクセル)を設定します。

Only Right & Bottom

または、refを設定することで可能領域を制限することも可能です。

Drag me!

弾力を設定する

弾力を設定する場合は、dragElasticに真偽値・数値またはtopbottomleftrightごとに値(ピクセル)を設定したオブジェクトを設定します。

Drag me!

勢いを設定する

勢いを設定する場合は、dragMomentumに真偽値を設定します。

Drag me!

方向を制限する

方向を制限する場合は、dragDirectionLocktrueに設定します。

Drag me!

スクロール

  • whileInView: コンポーネントがビューポートに入ったときに実行されるアニメーション。
  • viewport: ビューポートの検出方法を設定するオブジェクト。
    • once: trueの場合は、コンポーネントがビューポートに入った1回目にアニメーションを実行します。
    • root: スクロール可能な要素(ref)を設定することで、windowの代わりにその要素をビューポートとして使用します。
    • margin: ビューポートに追加するマージン。
    • amount: "some""all"・数値を設定することで、ビューポートと交差する必要がある要素の高さを設定します。
  • onViewportEnter: コンポーネントがビューポートに入ったときに実行されるコールバック関数。
  • onViewportLeave: コンポーネントがビューポートから出たときに実行されるコールバック関数。

Scroll me!

You found me!
Once me!

設定

プロジェクト全体でMotionの共通の設定をする場合は、MotionConfigを使用します。

import { MotionConfig } from "motion/react"
import { UIProvider } from "@yamada-ui/react"

const App = () => {
  return (
    <MotionConfig transition={{ duration: 1 }}>
      <UIProvider>
        <YourApplication />
      </UIProvider>
    </MotionConfig>
  )
}

類似のコンポーネント

Rotate

Rotateは、2つの要素を回転させながら切り替えるアニメーションを提供するコンポーネントです。

Ripple

Rippleは、要素に波及効果を付与し、ユーザーがクリックしたかどうかを認識させるコンポーネントです。

Flip

Flipは、2つの要素をフリップさせながら切り替えるアニメーションを提供するコンポーネントです。

Airy

Airyは、2つの要素をふわっと切り替えるアニメーションを提供するコンポーネントです。

SlideFade

SlideFadeは、要素を指定位置から移動しながら次第に表示または非表示にするコンポーネントです。

Slide

Slideは、要素をページの隅から表示または非表示にするコンポーネントです。

Skeleton

Skeletonは、コンテンツが読み込まれるまでのプレースホルダーとして機能するコンポーネントです。

Fade

Fadeは、要素を次第に表示または非表示にするコンポーネントです。

使用されているコンポーネント・フック

Accordion

Accordionは、情報を展開または折りたたんで表示するリストのコンポーネントです。

Airy

Airyは、2つの要素をふわっと切り替えるアニメーションを提供するコンポーネントです。

Collapse

Collapseは、要素を展開または折りたたんで表示するコンポーネントです。

Drawer

Drawerは、画面の端から表示されるパネルのコンポーネントです。

Fade

Fadeは、要素を次第に表示または非表示にするコンポーネントです。

FadeScale

FadeScaleは、要素を次第に拡大して表示または縮小して非表示にするコンポーネントです。

Flip

Flipは、2つの要素をフリップさせながら切り替えるアニメーションを提供するコンポーネントです。

Loading

Loadingは、データの読み込み中などの待機時間に表示するコンポーネントです。

Modal

Modalは、主要なコンテンツに重ねて表示され、ユーザーの注意を情報のみに集中させるコンポーネントです。

Popover

Popoverは、要素の周りにフローティングして情報を表示するコンポーネントです。

Reorder

Reorderは、項目の順序をドラッグアンドドロップで変更できるコンポーネントです。

Ripple

Rippleは、要素に波及効果を付与し、ユーザーがクリックしたかどうかを認識させるコンポーネントです。

Rotate

Rotateは、2つの要素を回転させながら切り替えるアニメーションを提供するコンポーネントです。

SegmentedControl

SegmentedControlは、ユーザーが複数の選択肢の中から1つを選択するために使用されるコンポーネントです。

Slide

Slideは、要素をページの隅から表示または非表示にするコンポーネントです。

SlideFade

SlideFadeは、要素を指定位置から移動しながら次第に表示または非表示にするコンポーネントです。

Snacks

Snacksは、フォームなどで使用される通知を制御するコンポーネントです。

Tooltip

Tooltipは、要素の補足など短い情報を表示するコンポーネントです。