【JavaScript】スクロールで要素をアニメーションさせながら表示
2023年11月09日
WEBサイト制作
- #備忘録
- #HTML
- #css
- #JavaScript
- #tips
こんにちは!
上毛印刷WEB制作担当のソーヤです。
今回は、使う場面が非常に多いスクロールで要素を表示させる方法についてご紹介します。
要素がアニメーションしながら出現するので、ユーザーの目に止まりやすい効果があります。
キャンペーンページ以外にも、普通にコーポレートサイトでもよく見かけますよね。
実装例
HTML例
<ul>
<li class="js-target js-slidein"><img src="/cp/wp/wp-content/uploads/2023/11/24337897.png" alt=""></li>
<li class="js-target js-jumpin"><img src="/cp/wp/wp-content/uploads/2023/11/23425133.png" alt=""></li>
<li class="js-target js-ghost"><img src="/cp/wp/wp-content/uploads/2023/11/24364785.png" alt=""></li>
</ul>
CSS例
ul{
list-style: none;
}
.js-target img{
width: 100%;
}
.js-target{
width: 200px;
margin: 0 auto 50px;
opacity: 0;
}
.js-slidein{
position: relative;
left: -60px;
transition: .4s;
}
.is-slidein{
left: 0;
opacity: 1;
}
@keyframes jumpin {
0% {
transform: translateY(0px);
}
50% {
transform: translateY(-60px);
}
100% {
transform: translateY(0px);
}
}
.is-jumpin{
animation: jumpin .6s ease-in-out;
opacity: 1;
}
@keyframes ghost {
0% {
transform: translate(60px,60px);
}
33% {
transform: translate(-60px,40px);
}
66%{
transform: translate(60px,20px);
}
100% {
transform: translate(0px,0px);
}
}
.is-ghost{
animation: ghost 3s cubic-bezier(0.33, 1, 0.68, 1);
opacity: 1;
}
キーフレームを使ってアニメーションさせてます。
JavaScript例
window.addEventListener('scroll', function() {
let scTop = window.scrollY;
let EffectH = 300;
let scBottom = scTop + window.innerHeight;
let effectPos = scBottom - EffectH;
let jsTarget = document.querySelectorAll('.js-target')
jsTarget.forEach(function(element) {
let thisPos = element.offsetTop;
if (thisPos < effectPos) {
if (element.classList.contains("js-slidein")) {
element.classList.add('is-slidein');
}else if(element.classList.contains("js-jumpin")){
element.classList.add('is-jumpin');
}else{
element.classList.add('is-ghost');
}
}
});
});
まとめ
久しぶりにキーフレームを使ったので、完全に使い方を忘れていました・・・
ちなみに今回もjQueryではなく、Vanilla.jsで実装してみました。
コピペしてガンガン使ってください!
この記事に対するご意見・ご感想・ご質問等ありましたら、
ぜひ下記フォームにてお送りください。