スクロールイベントを監視し、特定の位置に達したときにクラスを追加することでアニメーションを実現します。
スクロールアニメーション
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>JavaScriptスクロールアニメーションについて</title>
<link rel="stylesheet" href="./main.css" />
</head>
<body>
<div id="scroll-container">
<div class="scroll-item">アイテム 1</div>
<div class="scroll-item">アイテム 2</div>
<div class="scroll-item">アイテム 3</div>
</div>
<script src="./main.js"></script>
</body>
</html>
// ページの読み込みが完了したら
document.addEventListener("DOMContentLoaded", function () {
const scrollItems = document.querySelectorAll(".scroll-item");
const handleScroll = () => {
scrollItems.forEach((item) => {
// 要素が画面内に入っているかチェック
const rect = item.getBoundingClientRect();
if (rect.top >= 0 && rect.bottom <= window.innerHeight) {
item.classList.add("in-view");
} else {
item.classList.remove("in-view");
}
});
};
// スクロールイベントを監視
window.addEventListener("scroll", handleScroll);
// 初回のスクロールチェック
handleScroll();
});
#scroll-container {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.scroll-item {
opacity: 0;
transform: translateY(50px);
transition: opacity 0.5s ease-in-out, transform 0.5s ease-in-out;
margin: 50px 0;
padding: 20px;
background-color: #f8f9fa;
border-radius: 10px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.scroll-item.in-view {
opacity: 1;
transform: translateY(0);
}
.scroll-item:nth-child(odd) {
background-color: #e9ecef;
}
.scroll-item:hover {
background-color: #dee2e6;
box-shadow: 0 8px 10px rgba(0, 0, 0, 0.15);
}
出力結果
アイテム 1
アイテム 2
アイテム 3