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>
  )
}