下記のJqueryでスクロールエフェクトを複数要素に追加しようとしています。
スクロールして一つ目の要素は問題なく動作するのですが2つ目以降はエフェクト開始位置がズレているのか
だいぶ下の方までスクロールしないと動作しなくなってしまいます。(3つ目はもっと下まで要スクロール)
ズレていることはわかるのですが何が原因でこうなっているのでしょうか?
HTML
1<div class="box scroll-fade"> 2 <div class="pic"> 3 <div class="ex"> 4 <a href="img/season/a.jpg"><img src="img/link/a.jpg" alt="" width="90%"></a> 5 <p class="pagetitle">a</p> 6 <p class="content"></p> 7 </div> 8 </div> 9 <div class="pic"> 10 <div class="ex"> 11 <a href="img/season/b.jpg"><img src="img/link/b.jpg" alt="" width="90%"></a> 12 <p class="pagetitle">b</p> 13 <p class="content"></p> 14 </div> 15 </div> 16</div> 17<p></p> 18<div class="box scroll-fade"> 19 <div class="pic"> 20 <div class="ex"> 21 <a href="img/season/c.jpg"><img src="img/link/c.jpg" alt="" width="90%"></a> 22 <p class="pagetitle">c</p> 23 <p class="content"></p> 24 </div> 25 </div> 26 <div class="pic"> 27 <div class="ex"> 28 <a href="img/season/d.jpg"><img src="img/link/d.jpg" alt="" width="90%"></a> 29 <p class="pagetitle">d</p> 30 <p class="content"></p> 31 </div> 32 </div> 33</div>
CSS
1.pic { 2 display: table-cell; 3 text-align: center; 4} 5 6.pic img { 7 width: 80%; 8} 9 10.ex { 11 width: 80%; 12 margin: -8px auto 100px; 13 height: 250px; 14 background: white; 15} 16 17.box { 18 display: table; 19}
Javascript
1$(function(){ 2 var effect_pos = 300; // 画面下からどの位置でフェードさせるか(px) 3 var effect_move = 50; // どのぐらい要素を動かすか(px) 4 var effect_time = 800; // エフェクトの時間(ms) 1秒なら1000 5 6 // フェードする前のcssを定義 7 $('.scroll-fade').css({ 8 opacity: 0, 9 transform: 'translateY('+ effect_move +'px)', 10 transition: effect_time + 'ms' 11 }); 12 13 // スクロールまたはロードするたびに実行 14 $(window).on('scroll load', function(){ 15 var scroll_top = $(this).scrollTop(); 16 var scroll_btm = scroll_top + $(this).height(); 17 effect_pos = scroll_btm - effect_pos; 18 19 // effect_posがthis_posを超えたとき、エフェクトが発動 20 $('.scroll-fade').each( function() { 21 var this_pos = $(this).offset().top; 22 if ( effect_pos > this_pos ) { 23 $(this).css({ 24 opacity: 1, 25 transform: 'translateY(0)' 26 }); 27 } 28 }); 29 }); 30}); 31
回答1件
あなたの回答
tips
プレビュー