要素をスクロールに合わせてふわっと表示
2023.10.13 09:00
2023.10.17 17:00

かっこいいサイトでよくみるエフェクトを付けてみようとおもいます。
デモページ
cssとjavascriptで実現させます。
<!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="fade-in fade-in-up">
<img src="image1.jpg">
</div>
<div class="fade-in fade-in-left">
<img src="image2.jpg">
</div>
<div class="fade-in fade-in-right">
<img src="image3.jpg">
</div>
<div class="fade-in fade-in-up">
<img src="image1.jpg">
</div>
<div class="fade-in fade-in-left">
<img src="image2.jpg">
</div>
<div class="fade-in fade-in-right">
<img src="image3.jpg">
</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%;
}
.fade-in {
opacity: 0;
transition-duration: 2s;
transition-property: opacity, transform;
}
.fade-in-up {
transform: translate(0, 50%);
}
.fade-in-down {
transform: translate(0, -50%);
}
.fade-in-left {
transform: translate(-50%, 0);
}
.fade-in-right {
transform: translate(50%, 0);
}
.scroll-in {
opacity: 1;
transform: translate(0, 0);
}
// 効果を付けるクラスがついた要素から取得
let fadeInTarget = document.querySelectorAll('.fade-in');
// スクロールしたら
window.addEventListener('scroll', () => {
// 要素の数だけ繰り返す
for (let i = 0; i < fadeInTarget.length; i++){
// 位置を検出
const rect = fadeInTarget[i].getBoundingClientRect().top;
// スクロール位置
const scroll = window.pageYOffset || document.documentElement.scrollTop;
const offset = rect + scroll;
// 現在のブラウザの高さ
const windowHeight = window.innerHeight;
// スクロールで表示されたら、クラスを付与
if (scroll > offset - windowHeight + 150) {
fadeInTarget[i].classList.add('scroll-in');
}
}
});
無事実現できました!
今回は以上です!
参考:https://flex-box.net/js-scrollin/
画像利用:ぱくたそ