ウェブサイトにインタラクティブな要素を加えることで、ユーザーの注目を引き、サイトの魅力を増すことができます。その一例として「マグネティックエフェクト」があります。このエフェクトでは、マウスの動きに合わせて要素が動き、まるで磁石に引き寄せられるような視覚的効果を提供します。今回は、HTML、CSS、そしてJavaScriptを使って、基本的なマグネティックエフェクトを実装し、その後カスタマイズ方法を紹介します。
マグネティックエフェクトとは?
マグネティックエフェクトは、要素がマウスの動きに反応して、まるで磁石のように引き寄せられるように見える効果です。このエフェクトをウェブサイトに追加することで、ユーザーのインタラクションを促し、サイトの動的な魅力を高めることができます。以下に、基本的な実装方法を紹介します。
簡単なマグネティックエフェクトのサンプルコードの掲載と説明
まず、基本的なマグネティックエフェクトを実装します。
HTMLコード
<div class="magnetic">Hover Me</div>
ここでは、<div>
タグを使って「Hover Me」というテキストを表示する要素を作成します。class="magnetic"
によって、後でCSSやJavaScriptでこの要素をスタイリング・操作します。
CSSコード
body {
margin: 0;
padding: 0;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
background-color: #f0f0f0; /* 背景色 */
}
.magnetic {
width: 150px;
height: 50px;
color: #3498db; /* テキストカラーを青に変更 */
display: flex;
justify-content: center;
align-items: center;
font-size: 18px;
font-weight: bold;
border-radius: 5px;
transition: transform 0.2s ease-out;
position: relative;
background: transparent; /* 背景色なし */
}
body
タグで、要素を画面中央に配置しています。.magnetic
クラスでは、ボタンのような形を作成し、青色のテキストを中央に表示させます。
JavaScriptコード
const magnetic = document.querySelector('.magnetic');
document.addEventListener('mousemove', (e) => {
const rect = magnetic.getBoundingClientRect();
const centerX = rect.left + rect.width / 2;
const centerY = rect.top + rect.height / 2;
// 吸い込まれるように動きを大きくする
const deltaX = (e.clientX - centerX) * 1.2;
const deltaY = (e.clientY - centerY) * 1.2;
magnetic.style.transform = `translate(${deltaX}px, ${deltaY}px)`;
});
magnetic.addEventListener('mouseleave', () => {
magnetic.style.transform = 'translate(0, 0)';
});
- マウスの動きに合わせて
.magnetic
要素が動きます。 mousemove
イベントで、マウスの位置と要素の中央を比較して、要素がその位置に引き寄せられるように動きます。mouseleave
イベントで、マウスが要素から離れると、元の位置に戻ります。
サンプル
マウスカーソルの動きに合わせてdiv要素が追いかけます。
See the Pen magnetic-A by kasasagi_kmnmc (@kasasagi_kmnmc) on CodePen.
カスタマイズコードの掲載と説明
次に、エフェクトにアニメーションを追加して、視覚的な魅力を高めます。マウスオーバー時に円が拡大縮小を繰り返すアニメーションを実装します。
CSSのカスタマイズ
/* 円の拡大と縮小を繰り返すアニメーション */
@keyframes pulse {
0% {
transform: scale(0);
opacity: 0.5;
}
50% {
transform: scale(5);
opacity: 0.8;
}
100% {
transform: scale(0);
opacity: 0.5;
}
}
.magnetic::after {
content: '';
position: absolute;
background-color: rgba(52, 152, 219, 0.3); /* 円の色 */
border-radius: 50%;
width: 100px;
height: 100px;
transform: scale(0);
pointer-events: none;
top: 50%;
left: 50%;
transform-origin: center;
transition: transform 0.3s ease-out;
margin-top: -50px;
margin-left: -50px;
}
/* マウスオーバー時にアニメーションを適用 */
.magnetic:hover::after {
animation: pulse 2s infinite; /* 円が拡大・縮小を繰り返す */
}
@keyframes pulse
で、円が拡大・縮小するアニメーションを定義しています。0%から50%で拡大し、100%で元に戻ります。.magnetic::after
で、要素の中央に円形のエフェクトを追加しています。この円は、マウスオーバー時にアニメーションで拡大・縮小を繰り返します。
JavaScriptのカスタマイズ
const magnetic = document.querySelector('.magnetic');
document.addEventListener('mousemove', (e) => {
const rect = magnetic.getBoundingClientRect();
const centerX = rect.left + rect.width / 2;
const centerY = rect.top + rect.height / 2;
// 吸い込まれるように動きを大きくする
const deltaX = (e.clientX - centerX) * 1.2;
const deltaY = (e.clientY - centerY) * 1.2;
magnetic.style.transform = `translate(${deltaX}px, ${deltaY}px)`;
});
magnetic.addEventListener('mouseleave', () => {
magnetic.style.transform = 'translate(0, 0)';
});
カスタマイズ例
例えば、円の大きさやアニメーションの速度を調整したい場合、以下部分を設定します。
.magnetic::after {
width: 100px; /* 円の大きさを変更 */
height: 100px;
}
/* マウスオーバー時にアニメーションを適用 */
.magnetic:hover::after {
animation: pulse 2s infinite; /* 円が拡大・縮小を繰り返す */
}
サンプル〈カスタマイズ〉
ベースコードのときと同じでマウスカーソルの動きに合わせてdiv要素が追いかけますが、マウスカーソルがdiv要素の重なるとマウスオーバーのアニメーションが始まります。
See the Pen magnetic-Custom by kasasagi_kmnmc (@kasasagi_kmnmc) on CodePen.
まとめ
この記事では、マグネティックエフェクトの基本的な実装方法から、円が拡大縮小するアニメーションを追加したカスタマイズまでを紹介しました。
@keyframes
やJavaScriptの動きの調整を駆使して、さらにインタラクティブなエフェクトを作り出すことができます。自分のサイトに合わせたカスタマイズを試して、より魅力的なユーザー体験を提供してみてください。