カーソルを引き寄せるマグネットボタン
マウスカーソルに引き寄せられる磁石効果ボタン。Awwwards 系のクリエイティブサイトで頻出。JavaScript + transform translate でなめらか追従。
解説
カーソルを引き寄せるマグネットボタンは、UI コンポーネントカテゴリの「ボタン」に分類される実装パターンです。CSS と JavaScript の組み合わせで構成され、難易度は中級レベル。
カーソル位置に応じてボタンが引き寄せられるマグネット効果。Awwwards 系のおしゃれサイトで使われる注目度の高いインタラクション。
マウスカーソルがボタンの近くに来ると、ボタン自体がカーソルに「引き寄せられる」演出です。Awwwards 受賞サイト・ポートフォリオサイトでよく見る、印象的なマイクロインタラクション。
マウスのボタン中心からの相対位置を JavaScript で計算し、transform: translate() でボタンを少し動かしています。CSS transition で 0.2 秒程度のイージングを入れるとなめらかな質感になります。
仕組み
下記コードタブから HTML / CSS / JS をそれぞれ確認・コピーできます。プレビュー領域では実際の動作をその場で確認可能です。
JavaScript 部分は vanilla(プレーン)JS で書かれており、jQuery / React / Vue いずれの環境にも持ち込めます。
注意点 / カスタマイズ時のポイント
モバイルではホバーが効かないので、メディアクエリ @media (hover: hover) で PC のみ有効化するのが推奨。タッチデバイスでは通常ボタンとして動作します。
同時に多数のマグネットボタンを置くと CPU が高負荷になることがあるので、ヒーローセクション・CTA など要所に限定して使ってください。
使用例・適したシーン
- お問い合わせフォームの送信ボタン
- 資料ダウンロードの CTA
- ヒーローセクションの主要 CTA
- サブスク・申込ボタン
よくある質問
GSAP を使わずに実装したい
ボタンの大きさを変えると挙動も変わりますか?
このスニペットは商用利用できますか?
そのまま貼り付ければ動きますか?
ブラウザ対応は?
jQuery でも書けますか?
document.querySelector を $() に置き換える程度で動作しますが、近年は jQuery を使わない方が軽量で推奨されます。