CURSOR

カーソルエフェクトの作り方 — 追従・マグネット・スポットライト

カスタムカーソルや追従エフェクトは、ポートフォリオやクリエイティブLPの没入感を一段引き上げます。本ガイドでは、マウス座標の取得から、追従・マグネット・スポットライトといった代表的なカーソル演出の実装を解説します。

マウス座標の取得が基本

すべての起点は mousemove イベントです。getBoundingClientRect() で対象内の相対座標を求め、CSS変数(--x / --y)や transform に渡します。

実装デモ:Custom Cursor

追従(lag follow) — 慣性のある動き

requestAnimationFrame のループ内で現在地を目標地点に x += (target - x) * 0.1 のように少しずつ近づける(lerp)と、遅れて滑らかに追う慣性が生まれます。

実装デモ:Cursor Blob FollowCursor Trail

マグネット — 要素が引き寄せられる

ボタン中心とカーソルの距離を測り、一定半径内なら距離に比例して要素を translate で寄せます。離れたら原点へ戻す。CTAの存在感を高める人気手法。

実装デモ:Magnetic ButtonMagnetic Hover

スポットライト — カーソルが照らす

カーソル位置を中心にした radial-gradient を要素に当てると、カーソルが表面を照らすスポットライトになります。カードや隠し文字の演出に。

実装デモ:Cursor Glow FollowCursor Spotlight RevealCard Spotlight

アクセシビリティの注意

cursor: none で標準カーソルを隠す場合、タッチデバイスや支援技術利用者への配慮が必要です。重要操作はカーソル演出に依存させないこと。

@media (hover: none) でタッチ端末では演出を無効化するのが安全です。

FAQ

カーソルエフェクトはモバイルで動く?
マウスのないタッチデバイスでは多くが機能しません。@media (hover: none) で無効化し、標準カーソル演出に依存しない設計にします。
追従がカクつくときは?
transform(translate)で動かし、left/top の変更は避けてください。requestAnimationFrame を使い、重い処理をループ内に入れないことも重要です。
cursor: none にしたら操作しづらい
代替の視覚要素(ドットやリング)を必ず表示し、ボタン等のクリック領域が分かるようにします。
パフォーマンスへの影響は?
mousemove は高頻度発火するため、ループは rAF にまとめ、DOM 生成は最小限に。トレイル系は要素数の上限を設けると安定します。