SNSをチェック

マウススクロールイベントに慣性を加えるアニメーションの作成

今回は、生のJavaScriptを使ってマウススクロールイベントに慣性を加えるアニメーションを作成します。このアニメーションは、ページをスクロールしたときに、スクロールの速度に応じて慣性を持って滑らかに移動する要素を作成します。

ステップ 1: 基本的なHTML構造

まず、基本的なHTMLを設定します。ここでは、スクロールを検知するためのコンテナと、その中にアニメーションさせる要素を配置します。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Scroll Inertia</title>
<style>
body, html {
margin: 0;
padding: 0;
height: 200%;
overflow: hidden;
}
.container {
position: relative;
width: 100%;
height: 100%;
overflow-y: scroll;
background: lightgray;
}
.content {
position: absolute;
top: 0;
left: 50%;
transform: translateX(-50%);
width: 80%;
background: white;
padding: 20px;
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
}
</style>
</head>
<body>
<div class="container">
<div class="content">
<h1>Scroll Down</h1>
<p>Scroll to see the inertia effect in action.</p>
</div>
</div>
<script src="script.js"></script>
</body>
</html>

ステップ 2: JavaScriptによるスクロールイベントの処理

次に、スクロールイベントを処理し、慣性を持たせるアニメーションをJavaScriptで実装します。

document.addEventListener('DOMContentLoaded', () => {
const container = document.querySelector('.container');
const content = document.querySelector('.content');
let lastScrollY = 0;
let currentScrollY = 0;
let scrollSpeed = 0;
let isScrolling = false;

function updateScroll() {
if (isScrolling) {
requestAnimationFrame(updateScroll);
}
scrollSpeed *= 0.9;
currentScrollY += scrollSpeed;
container.scrollTop = currentScrollY;
}

container.addEventListener('scroll', (e) => {
if (!isScrolling) {
requestAnimationFrame(updateScroll);
isScrolling = true;
}
const scrollTop = container.scrollTop;
scrollSpeed = scrollTop - lastScrollY;
lastScrollY = scrollTop;
});

container.addEventListener('wheel', (e) => {
scrollSpeed += e.deltaY * 0.5;
});
});

詳細な説明

ステップ 1: 基本的なHTML構造

  • HTML構造: containerというクラスを持つスクロールコンテナと、その中にあるcontentというクラスを持つアニメーション対象の要素を作成します。
  • CSS: コンテナのスクロール領域を設定し、コンテンツが中央に配置されるようにスタイルを適用します。

ステップ 2: JavaScriptによるスクロールイベントの処理

  1. 変数の定義:
    • lastScrollY: 最後に記録されたスクロール位置。
    • currentScrollY: 現在のスクロール位置。
    • scrollSpeed: スクロールの速度。
    • isScrolling: スクロール中かどうかのフラグ。
  2. updateScroll関数:
    • 慣性を持たせるため、requestAnimationFrameを使ってアニメーションを更新します。
    • scrollSpeedを徐々に減速させ、現在のスクロール位置に反映させます。
    • container.scrollTopcurrentScrollYに設定して、スクロール位置を更新します。
  3. スクロールイベントリスナー:
    • スクロールイベントが発生すると、requestAnimationFrameを使ってupdateScroll関数を呼び出します。
    • スクロールの速度を計算し、lastScrollYを更新します。
  4. ホイールイベントリスナー:
    • ホイールイベントが発生すると、scrollSpeedを増加させます。これにより、スクロールの速度が加速します。

このコードにより、スクロールイベントに慣性を持たせることができます。ユーザーがスクロールを止めても、スクロールが徐々に減速し、自然な動きを実現します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です