目を引く(Attention)
バウンス・シェイク・パルス・点滅アニメーションをFramer Motion / React Spring / GSAP / CSS Animationで実装・比較
読み込み中...
'use client';
import { useAnimation, motion } from 'framer-motion';
export default function AttentionDemo() {
const controls = useAnimation();
const triggerBounce = async () => {
await controls.start({
y: [0, -24, 0, -12, 0, -6, 0],
transition: { duration: 0.7, ease: 'easeOut' },
});
};
const triggerShake = async () => {
await controls.start({
x: [0, -12, 12, -12, 12, -6, 6, 0],
transition: { duration: 0.5, ease: 'easeInOut' },
});
};
const triggerPulse = async () => {
await controls.start({
scale: [1, 1.25, 1, 1.25, 1, 1.1, 1],
transition: { duration: 0.7, ease: 'easeInOut' },
});
};
const triggerFlash = async () => {
await controls.start({
opacity: [1, 0, 1, 0, 1, 0, 1],
transition: { duration: 0.6 },
});
};
return (
<div>
<motion.div animate={controls}>
アニメーション対象
</motion.div>
<button onClick={triggerBounce}>バウンス</button>
<button onClick={triggerShake}>シェイク</button>
<button onClick={triggerPulse}>パルス</button>
<button onClick={triggerFlash}>点滅</button>
</div>
);
}jQueryで書くとこうなる
.effect() メソッドや、.addClass() でCSSアニメーションをトリガーする方法が使われていました。Reactでは Framer Motion の useAnimation・React Spring の命令型 API・GSAP の contextSafe + timeline() を使うことで、より宣言的に同等の表現が可能です。// jQueryプラグイン(jQuery UI)を使ったバウンス
$('#box').effect('bounce', { times: 3 }, 400);
// シェイク
$('#box').effect('shake', { times: 3, distance: 10 }, 400);
// パルス(強調)
$('#box').effect('pulsate', { times: 3 }, 400);
// 点滅
$('#box').fadeOut(150).fadeIn(150).fadeOut(150).fadeIn(150);
// addClass でCSSアニメーションをトリガーする方法(プラグイン不要)
$('#box').addClass('animate-bounce');
setTimeout(() => $('#box').removeClass('animate-bounce'), 1000);実装方法の比較
| 項目 | Framer Motion | React Spring | GSAP | CSS Animation |
|---|---|---|---|---|
| トリガー制御 | useAnimationで任意のタイミングで発火可能 | useSpringのAPIで命令的にアニメーションを発火 | contextSafeで包んだ関数で任意のタイミングで発火 | クラス着脱で制御(やや煩雑) |
| アニメーション定義 | JSオブジェクトで直感的に記述 | toに配列を渡してキーフレーム的に記述 | keyframesオブジェクト配列またはtimeline().to()で定義 | @keyframesで定義が必要 |
| 連続・チェーン | awaitで順番に実行可能 | to配列またはasync nextで連続アニメーション | timeline()で複数tweenをシーケンシャルに実行 | animation-delayで代替 |
| 設定コスト | 高:framer-motionのインストールが必要 | 高:@react-spring/webのインストールが必要 | 中:gsap + @gsap/reactのインストールが必要 | 低:追加ライブラリ不要 |
| 再利用性 | フック・バリアントで再利用しやすい | カスタムフックでspringロジックを再利用可能 | contextSafeをカスタムフックで再利用可能 | CSSクラスとして再利用可能 |
useAnimation のポイント
- •
useAnimation()で取得したコントロールをmotion要素のanimateプロップに渡すと、controls.start()で命令的にアニメーションを発火できる - •
controls.start()は Promise を返すため、awaitで完了を待ってから次の処理に進める - • キーフレームは配列で指定する(例:
y: [0, -24, 0]) - • CSS Animationでは同じアニメーションを再トリガーするためにクラスを一度外してから付け直す必要があり、
requestAnimationFrameで1フレーム待つ処理が必要
🤖 AIプロンプトテンプレート
Next.js + Framer Motion で「目を引く」アニメーションを実装してください。 - ボタンクリックでバウンス・シェイク・パルス・点滅アニメーションをトリガー - useAnimation フックを使って命令的にアニメーションを制御 - 各アニメーションはボタンクリック後に1回だけ実行される - TypeScript / Tailwind CSS v4 を使用
⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。
React Spring のポイント
- •
useSpring(() => { y: 0 })の関数形式で呼ぶと[springs, api]のタプルが返り、api.start()で命令的に発火できる - •
toに配列を渡すとキーフレーム的に複数ステップのアニメーションを定義できる - • 各ステップに個別の
config(tension・friction)を指定することで、段階的に減衰する自然な動きを表現できる - •
durationをconfigに指定すると、物理ベースではなく時間ベースのアニメーションになる
🤖 AIプロンプトテンプレート
Next.js + React Spring で「目を引く」アニメーションを実装してください。 - useSpring を使ってバウンス・シェイク・パルス・点滅アニメーションをトリガー - useSpring() の命令型API([springs, api] = useSpring(() => ...))でアニメーションを制御 - to配列でキーフレーム的にアニメーションを定義する - 物理ベースのspring configでリアルな動きを表現する - 使用ライブラリ: @react-spring/web - TypeScript / Tailwind CSS v4 を使用
⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。
GSAP のポイント
- •
gsap.to(el, { keyframes: [...] })で配列形式のキーフレームを指定すると、各ステップが順番に実行される - •
bounce.outやelastic.out(1, 0.4)などのイージング文字列で、物理的なバウンス・弾む動きを手軽に表現できる - •
gsap.timeline()は.to().to()のメソッドチェーンで複数tweenを順番に実行する(Framer のawait controls.start()に相当) - •
contextSafeで包まない関数でアニメーションを作成すると、コンポーネントのアンマウント時にクリーンアップされないので注意
🤖 AIプロンプトテンプレート
Next.js + GSAP で「目を引く」アニメーションを実装してください。 - useGSAP フックと contextSafe を使ってボタンクリックでアニメーションをトリガー - gsap.timeline() でバウンス(bounce.out)・パルス(elastic.out)を実装 - gsap.to() の keyframes 配列でシェイク・フラッシュを実装 - 各アニメーションはボタンクリック後に1回だけ実行される - 使用ライブラリ: gsap, @gsap/react - TypeScript / Tailwind CSS v4 を使用
⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。
アテンションアニメーション(Attention Seekers)は、要素を一時的に揺らす・点滅させる・バウンスさせるなどして、ユーザーの注意を引くためのアニメーション効果。
エラーメッセージの強調・新着通知バッジの点滅・CTA(Call to Action)ボタンのハイライト・フォームの入力漏れ指摘など、重要な情報に気づいてほしい場面で使われる。
- •シェイク型(左右に揺れる)
- •バウンス型(上下に弾む)
- •パルス型(拡縮を繰り返す)
- •フラッシュ型(点滅)
- •ジェロ型(ゼリーのように揺れる)
同じカテゴリの他のページ
文字を演出する(Text Animation)| UI Memo
GSAPのSplitText・ScrambleTextで実装する文字アニメーションのサンプル。1文字ずつフェード・スライド・波・スクランブル・バラけて再集合など、テキスト演出のUIパターン実例集。
動きの質感を選ぶ(Easing)
イージングの違いを体験で比較。power・back・bounce・elasticなどGSAP・Framer Motion・CSS Transitionのeaseを一覧・比較できるUIパターン実例集。
スクロールで物語る(Scroll Storytelling)
GSAPのScrollTriggerで実装するスクロール演出のサンプル。scrub・pin・横スクロール・パララックスなど、スクロールに連動した高度なアニメーションのUIパターン実例集。デモ・コード付き。