前提・実現したいこと
スクロールでセクションごとに要素を止めることと、フェードインパララックスを同時に使用したい
発生している問題
100vhのセクションごとに画面内に止まる動きをさせたく、
html
1<div class="box"> 2<section class="hoge"><img src="hoge.jpg" class="sa"></section> 3<section class="hoge"><img src="hoge.jpg" class="sa"></section> 4<section class="hoge"><img src="hoge.jpg" class="sa"></section> 5</div>
CSS
1.box{ 2 overflow: auto; 3 scroll-snap-type: y mandatory; 4 height: 100vh; 5} 6.hoge{ 7 width: 100%; 8 height: 100vh; 9 scroll-snap-align: start; 10 overflow: hidden; 11 position: relative; 12 height: -webkit-fill-available; 13}
上記のように記述しており、要素が画面内に入った際の動きとして下記jsを記述しているのですが、このjsが動きません。
js
1var scrollAnimationElm = document.querySelectorAll('.sa'); 2var scrollAnimationFunc = function() { 3 for(var i = 0; i < scrollAnimationElm.length; i++) { 4 var triggerMargin = 0; 5 var elm = scrollAnimationElm[i]; 6 var showPos = 0; 7 if(elm.dataset.sa_margin != null) { 8 triggerMargin = parseInt(elm.dataset.sa_margin); 9 } 10 if(elm.dataset.sa_trigger) { 11 showPos = document.querySelector(elm.dataset.sa_trigger).getBoundingClientRect().top + triggerMargin; 12 } else { 13 showPos = elm.getBoundingClientRect().top + triggerMargin; 14 } 15 if (window.innerHeight > showPos) { 16 var delay = (elm.dataset.sa_delay)? elm.dataset.sa_delay : 0; 17 setTimeout(function(index) { 18 scrollAnimationElm[index].classList.add('show'); 19 }.bind(null, i), delay); 20 } 21 } 22} 23window.addEventListener('load', scrollAnimationFunc); 24window.addEventListener('scroll', scrollAnimationFunc);
試したこと
CSS
1.box{ 2 overflow: auto; 3 scroll-snap-type: y mandatory; 4 /*height: 100vh;*/ 5}
このようにheight:100vhを取ると動いたのでここが原因かと思うのですが、そこを取ると今度は画面にピタッと収まらなくなってしまいます。
ご教示よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー