JavaScriptを使って簡単なマウスアニメーションを作成する方法をいくつか紹介します。これらのアニメーションは、ユーザーのマウスの動きに反応して、インタラクティブなエフェクトを実現できます。
1. マウスフォロワーアニメーション
See the Pen Untitled by techcode sample (@techcode-sample) on CodePen.
マウスフォロワーは、マウスカーソルを追従するオブジェクトを表示するアニメーションです。
サンプルコード
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Mouse Follower</title>
<style>
body {
margin: 0;
overflow: hidden;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
background-color: #282c34;
}
.follower {
width: 20px;
height: 20px;
background-color: #61dafb;
border-radius: 50%;
position: absolute;
pointer-events: none;
transition: transform 0.1s ease;
}
</style>
</head>
<body>
<div class="follower"></div>
<script>
const follower = document.querySelector('.follower');
document.addEventListener('mousemove', (e) => {
follower.style.transform = `translate(${e.clientX}px, ${e.clientY}px)`;
});
</script>
</body>
</html>
解説
- HTML:
div
要素にfollower
というクラスを付け、スタイルで円形の追従オブジェクトを定義しています。 - CSS:
.follower
クラスにより、背景色を設定し、円形のボックスを作成します。pointer-events: none
でこの要素がマウスイベントを受け取らないようにし、transition
でスムーズな移動効果を実現しています。 - JavaScript:
mousemove
イベントを監視し、マウスの位置に基づいてfollower
の位置を更新しています。e.clientX
とe.clientY
で、マウスの現在位置を取得し、translate
で追従オブジェクトをその位置に移動させます。
2. ホバーエフェクトアニメーション
See the Pen Untitled by techcode sample (@techcode-sample) on CodePen.
ホバーエフェクトは、マウスが特定の要素に乗ったときに発動するアニメーションです。
サンプルコード
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hover Effect</title>
<style>
body {
margin: 0;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
background-color: #282c34;
}
.box {
width: 100px;
height: 100px;
background-color: #61dafb;
transition: transform 0.3s ease;
}
.box:hover {
transform: scale(1.5) rotate(45deg);
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
解説
- HTML: 単純な
div
要素で四角形のボックスを作成しています。 - CSS:
.box
クラスでボックスのスタイルを設定し、hover
疑似クラスを使って、マウスが乗ったときにスケールと回転のアニメーションを追加しています。transition
でアニメーションのスムーズさを調整しています。
3. マウスパララックスエフェクト
See the Pen Untitled by techcode sample (@techcode-sample) on CodePen.
マウスパララックスエフェクトは、マウスの動きに応じて背景やオブジェクトが異なるスピードで動くことで、深みのある視覚効果を作り出します。
サンプルコード
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Parallax Effect</title>
<style>
body {
margin: 0;
overflow: hidden;
height: 100vh;
background-color: #282c34;
display: flex;
justify-content: center;
align-items: center;
}
.layer {
position: absolute;
width: 300px;
height: 300px;
}
.layer1 {
background-color: rgba(97, 218, 251, 0.7);
transform: translateZ(0px);
}
.layer2 {
background-color: rgba(97, 218, 251, 0.5);
transform: translateZ(-50px);
}
.layer3 {
background-color: rgba(97, 218, 251, 0.3);
transform: translateZ(-100px);
}
</style>
</head>
<body>
<div class="layer layer1"></div>
<div class="layer layer2"></div>
<div class="layer layer3"></div>
<script>
document.addEventListener('mousemove', (e) => {
const layers = document.querySelectorAll('.layer');
layers.forEach((layer, index) => {
const speed = index * -50;
const x = (window.innerWidth - e.pageX * speed) / 100;
const y = (window.innerHeight - e.pageY * speed) / 100;
layer.style.transform = `translateX(${x}px) translateY(${y}px)`;
});
});
</script>
</body>
</html>
解説
- HTML: 複数の
div
要素をレイヤーとして設定し、それぞれに異なるクラスを付与しています。 - CSS: 各レイヤーのスタイルを設定し、異なる
translateZ
値を使って、視差効果を表現しています。 - JavaScript:
mousemove
イベントを使用して、マウスの位置に基づいてレイヤーを異なるスピードで移動させます。各レイヤーに対して、transform
プロパティを更新し、視差効果を作り出しています。
これらのサンプルを元にして、さらに複雑なマウスインタラクションを試してみることができます。マウスアニメーションは、ユーザー体験を豊かにし、サイトやアプリケーションに魅力的なエフェクトを追加するための強力なツールです。