一定距離スクロールで要素を表示させる
2023.10.17 09:00
2023.10.17 17:04

最初は表示されてないけど、ある程度スクロールしたら要素が表示される表現をしてみたいと思います。
以下は300スクロールほど下げたら赤い要素が表示されるようなコードです。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="style.css" type="text/css" media="all" />
</head>
<body>
<div class="margin">↓下へスクロール</div>
<div class="container">
<div class="display">表示</div>
</div>
<script type="text/javascript" src="script.js"></script>
</body>
</html>
.margin {
height: 800px;
}
.container {
margin: 0 auto;
width: 600px;
}
.container img {
width: 100%;
}
.display {
position: fixed;
bottom: 30px;
right: 30px;
opacity: 0;
}
.display.isActive {
opacity: 1;
transition: all 0.65s;
}
//下から表示させる要素を指定
let target = document.querySelectorAll('.display');
// スクロールしたら
window.addEventListener('scroll', () => {
// 要素の数だけ繰り返す
for (let i=0; i<target.length; i++){
// 位置を検出
const rect = target[i].getBoundingClientRect().top;
// スクロール位置
const scroll = window.pageYOffset || document.documentElement.scrollTop;
const offset = rect + scroll;
// 現在のブラウザの高さ
const windowHeight = window.innerHeight;
// スクロールで表示されたら、クラスを付与
if (scroll < windowHeight * 1.2) {
target[i].classList.remove('isActive');
} else {
target[i].classList.add('isActive');
}
}
});
無事実現できました!
今回は以上です!
参考:https://flex-box.net/js-scrollin/