本文へスキップ
  1. Web BENTO JS
  2. カテゴリ一覧
  3. クリック演出
11 / EFFECTS 12 パーツ

クリック演出のJS実装 12選

コピペで動くクリック演出(マイクロインタラクション)のサンプル集です。プレビューは実際にクリック・長押しで試せます。HTML / CSS / JS タブでコードを確認し、全部コピーを押せば1回の貼り付けで完成します。すべて依存ライブラリなしのバニラJSで、生成したDOMはアニメーション終了と同時に自動削除します。

該当するパーツが見つかりませんでした。

リップル(波紋)

<button type="button" class="bnto-ripple" data-bnto-ripple>
  クリックしてみて
</button>
使い方のコツ

Material Design でおなじみの「押した感」演出です。波紋の色は .rpbackground で調整できます。明るい色のボタンなら rgba(0,0,0,.15) の黒波紋も自然です。親要素の overflow: hidden が波紋のはみ出し防止に必須です。

いいねハート

<button type="button" class="bnto-like" data-bnto-like>
  <span class="ht" aria-hidden="true"><svg viewBox="0 0 24 24"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg></span>
  いいね <b class="n">12</b>
</button>
使い方のコツ

もう一度押すと取り消し(−1)になるトグル式です。状態は aria-pressed で支援技術にも伝わります。飛び散る小ハートの数は for の回数、飛距離は 28 の値で調整します。実運用ではクリック時にサーバーへ送信する処理を追加してください。

成功チェック変化

<button type="button" class="bnto-done" data-bnto-done>
  <span class="tx">保存する</span>
  <span class="sp" aria-hidden="true"></span>
  <svg class="ok" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg>
</button>
使い方のコツ

デモは setTimeout(done, 900) で保存処理を疑似再現しています。実際は fetch(...).then(done) のように通信完了時に done() を呼ぶだけでOKです。処理中の再クリックはクラス判定でガード済みなので、二重送信防止にもなります。

紙吹雪

<div class="bnto-confetti" data-bnto-confetti>
  <button type="button" class="go">🎉 紙吹雪を飛ばす</button>
</div>
使い方のコツ

枚数は for の回数、色は COLORS 配列で自由に調整できます。購入完了・登録完了・レベルアップなど「ここぞ」の1回だけに使うのが効果的です。毎クリックで出すと安っぽくなるので注意です。

メールアドレスを入力してください

シェイクエラー

<!-- デモ用に「エラーを出す」ボタン付き。実際はバリデーション失敗時に発動 -->
<div class="bnto-shake" data-bnto-shake>
  <input class="ipt" type="text" placeholder="メールアドレス" aria-label="メールアドレス">
  <p class="er">メールアドレスを入力してください</p>
  <button type="button" class="go">エラーを出す</button>
</div>
使い方のコツ

実際のフォームでは「エラーを出す」ボタンの代わりに、送信時のバリデーション失敗で is-error を付与してください。震え幅は translateX の値で調整できます。動きを減らす設定のユーザーには、CSSのメディアクエリで震えだけ止めて赤枠とメッセージは表示されます。

長押しゲージ

<button type="button" class="bnto-hold" data-bnto-hold>
  <span class="bar" aria-hidden="true"></span>
  <span class="tx">長押しで確定</span>
</button>
使い方のコツ

削除・送金など取り返しのつかない操作の誤タップ防止に効く定番UIです。必要な長押し時間は --hold(秒)を変えるだけで、CSSのゲージ速度とJSの判定が連動します。ゲージは装飾ではなく進捗表示なので、reduced-motion 環境でもそのまま機能します。

カウントバッジポップ

<button type="button" class="bnto-badge" data-bnto-badge>
  カートに追加
  <span class="bg">2</span>
</button>
使い方のコツ

ヘッダーのカートアイコンや通知ベルに付けても同じ仕組みで動きます。数値の変化+バウンドで「追加できた」ことが視覚的に伝わり、確認ダイアログを出さずに済むのがポイントです。跳ね幅は scale(1.45) で調整してください。

スターバースト

<button type="button" class="bnto-burst" data-bnto-burst>
  クリックで星が弾ける
</button>
使い方のコツ

お気に入り登録・スタンプ・実績解除など「ごほうび感」を出したい場面に向いています。星の数は for の回数、飛距離は d の値で調整できます。ボタンの外まで飛ばしたいときは親要素に overflow: hidden を付けないよう注意してください。

エリア内でマウスを動かしてみてください

テキストリンク

マウスストーカー

<!-- デモ用のミニエリア。ページ全体で使うときは body 直下に .st だけを置き、position: fixed で運用 -->
<div class="bnto-stalker" data-bnto-stalker>
  <span class="st" aria-hidden="true"></span>
  <p class="gd">エリア内でマウスを動かしてみてください</p>
  <a class="lk" href="#">テキストリンク</a>
  <button type="button" class="bt">ボタン</button>
</div>
使い方のコツ

ページ全体に適用する場合は、bodydata-bnto-stalker を付けて .stposition: fixed で body 直下に置くだけです。.stmix-blend-mode: difference; background: #fff; を指定すると、下の色を反転する人気の演出になります。追従の遅れは 0.15 の係数で調整でき、タッチデバイスと「視差効果を減らす」設定の環境では自動で無効になります。

NEW

3Dチルトカード

マウスの位置に合わせてカードが立体的に傾きます

3Dチルトカード

<!-- data-max: 最大の傾き(度・省略時は10) -->
<div class="bnto-tilt" data-bnto-tiltcard data-max="10">
  <span class="tag">NEW</span>
  <p class="tt">3Dチルトカード</p>
  <p class="ds">マウスの位置に合わせてカードが立体的に傾きます</p>
</div>
使い方のコツ

傾きの強さは data-max 属性(度数)で調整できます。奥行き感は perspective(600px) の値を小さくするほど強調されます。カード内に画像やリンクを置いてもそのまま動きます。タッチデバイスと「視差効果を減らす」設定の環境では自動で無効になり、通常のカードとして表示されます。

マグネットボタン

<!-- 外側のdivが判定エリア。data-pull: 吸い付き強度(省略時は0.35) -->
<div class="bnto-magnet" data-bnto-magnetbtn data-pull="0.35">
  <button type="button" class="btn">吸い付くボタン</button>
</div>
使い方のコツ

吸い付きの強さは data-pull(0.2〜0.5が目安)で調整します。判定エリア(外側のdiv)を広めにとるほど「遠くから引き寄せられる」感じが強まります。CTAなど1画面に1つの主役ボタンに使うと効果的です。タッチデバイスと「視差効果を減らす」設定の環境では自動で無効になり、通常のボタンとして機能します。

0COMBO

連打コンボカウンター

<!-- data-wait: リセットまでの待ち時間(ms・省略時は1000) -->
<div class="bnto-combo" data-bnto-combobtn data-wait="1000">
  <p class="cnt"><b class="num">0</b><span class="unit">COMBO</span></p>
  <button type="button" class="go">連打してみて!</button>
</div>
使い方のコツ

リセットまでの時間は data-wait(ミリ秒)で調整できます。弾み具合は scale(1.4) の値で変えられます。キャンペーンのミニゲームや「いいね連打」のような遊び要素のある場面に向いています。連打を煽る演出なので、通常の業務UIでは使いどころを選んでください。

クリック演出JSの基礎知識

クリック演出は、ボタンを押した瞬間に波紋や小さなアニメーションで反応を返すマイクロインタラクションの代表格です。「押せた」ことが目で見て分かるので操作の不安が減り、いいねや追加などの行動が気持ちよくなります。このページのサンプルはすべて依存ライブラリなしのバニラJavaScriptで、jQueryもアニメーションライブラリも不要です。

使い方は、HTML / CSS / JSの3タブをそれぞれ貼り付けるか、「全部コピー」ボタンでひとまとめになったコードを1回貼り付けるだけです。初期化は data-bnto-* 属性の自動検出式なので、同じページに何個置いても、うっかりコードを2回貼っても壊れません。

マイクロインタラクションの効果

クリックへの即時フィードバックには、(1) 操作が受け付けられたことを伝える、(2) 処理の状態(読み込み中→完了)を伝える、(3) 行動に小さな報酬を与える、という3つの役割があります。リップルや成功チェックは(1)(2)、いいねハートや紙吹雪は(3)の典型例です。逆に長押しゲージのようにあえて操作を重くして誤操作を防ぐのもマイクロインタラクションの仕事です。

やりすぎに注意 — 演出は「控えめ・短く・ここぞ」

演出は多用するほど効果が薄れ、うるさいサイトになります。目安は0.3〜0.7秒で終わる短いアニメーションを、意味のある操作にだけ付けることです。紙吹雪のような派手な演出は購入完了など「1セッションに1回」の場面に限定しましょう。また、OSの「視差効果を減らす」設定(prefers-reduced-motion)のユーザーには演出をスキップし、カウント増加などの状態変化だけを届けるのがマナーです。このページのスクリプトはすべて対応済みです。

生成DOMの後始末とパフォーマンス

波紋・紙吹雪・星などのパーティクルはクリックのたびにDOM要素を生成します。削除を忘れると要素が無限に溜まり、メモリと描画性能を圧迫する典型的なバグにつながります。このページの実装は、すべての生成要素に animationend イベント(またはタイマー)でアニメーション終了と同時に remove() を仕込んであるので、連打してもDOMは増え続けません。また、アニメーションは transformopacity だけで動かしているため、レイアウト再計算が発生せず軽量です。

「全部コピー」と「分けて貼る」の使い分け

「全部コピー」を使うと、HTML・CSS・JavaScriptがひとつの自己完結ブロックとしてコピーされるので、1回の貼り付けだけですぐ動きを確認できます。動作のお試しや、1ページ完結のLPに組み込むときはこの方法が手軽です。

一方、本番サイトへ本格的に組み込む場合は、CSSはスタイルシート(.cssファイル)へ、JavaScriptは</body>直前や共通の.jsファイルへ、HTMLは使いたい場所へと分けて貼るのが一般的です。スタイルとスクリプトを1か所に集約できるため、複数ページ・複数パーツで使い回すときの管理がしやすく、ブラウザのキャッシュも効きやすくなります。なお、同じパーツをページ内で何度も使う場合でも、CSSとJSを貼るのは1回だけで大丈夫です(初期化スクリプトが該当要素すべてに自動で効きます)。

よくある質問

コピーしたクリック演出はそのまま動きますか?
はい。「全部コピー」を押すとHTML・CSS・JSがひとつの自己完結ブロックになってコピーされ、ページに貼り付けるだけで動きます。ライブラリの読み込みは一切不要です。
波紋や紙吹雪で生成されたDOMは増え続けませんか?
増えません。生成した要素はすべて animationend イベントやタイマーでアニメーション終了と同時に自動削除されるため、何度クリックしてもDOMが溜まらず、メモリリークの心配もありません。
スマホのタップでも動きますか?
動きます。click イベントはタップでも発火し、波紋やスターバーストの座標も clientX / clientY から取得しているため、タップした位置から正しく演出が始まります。長押しゲージは Pointer Events でタッチにも対応しています。
「視差効果を減らす」設定のユーザーにはどう見えますか?
各スクリプトは prefers-reduced-motion を判定し、有効な場合は波紋や紙吹雪などの装飾アニメーションをスキップして、カウント増加やチェック表示などの状態変化だけを行います。演出なしでも機能は完全に使えます。
このページのパーツはAIコーディングツールでも使えますか?
はい。Claude CodeやCursorのようにWebページを読めるAIには、このページのURLとパーツ名(例:「いいねハート」)を伝えるだけで実装を指示できます。AIがWebを読めない場合は、「全部コピー」で取得した自己完結ブロックをチャットに貼り付けて調整を頼むのが確実です。改変後のコードは、公開前に動作確認することをおすすめします。

関連カテゴリ

クリック演出と組み合わせて使いやすいパーツはこちらです。