作成したプログラム
画面をスクロールすると見出しにアニメーションが適用されるプログラムをJSで作成しました。
実現したいこと
画面をスクロールし、画面に入った見出しに順次アニメーションを適用していく、という形にしたいのですが、
今のコードですと全ての見出しに一斉にアニメーションが発生してしまいます。
それぞれのアニメーションをeach(function(){})で囲って個別に適用させる方法も考えましたが、
同じ処理を何度も記述しなければいけなくなり、効率が悪いです。
より効率的なコードの記述がありましたら、ご教示頂けますと幸いです。
jQuery
1$(function(){ 2 3var enHdBlock = $(".en_hd_block"); 4 5$(window).scroll(function(){ 6 var windowHeight = $(window).height(); 7 var target = enHdBlock.offset().top; 8 var scroll = $(window).scrollTop(); 9 if(scroll > target - windowHeight + 100){ 10 enHdBlock.addClass("en_hd_block_on"); 11 enHdBlock.delay(500).queue(function(){ 12 $(".en_hd_font").css({ 13 opacity: '1' 14 }); 15 enHdBlock.addClass("en_hd_block_end"); 16 }); 17 } 18}); 19 20}); 21
HTML
1<!----このようなコードが画面に何個もある----> 2<section class="section_1"> 3 <h2 class="en_hd_block"> 4 <span class="en_hd_font">Heading1</span> 5 </h2><!--/.en_hd_block --> 6</section> 7 8<section class="section_2"> 9 <h2 class="en_hd_block"> 10 <span class="en_hd_font">Heading2</span> 11 </h2><!--/.en_hd_block --> 12</section>
CSS
1 2.en_hd_block{ 3 display: inline-block; 4 font-size: 12rem; 5 font-weight: 900; 6 color: #b34b4b; 7 font-family: 'Roboto', sans-serif; 8 margin-bottom: 4rem; 9 position: relative; 10} 11 12.en_hd_block .en_hd_font{ 13 opacity: 0; 14} 15 16.en_hd_block::before{ 17 content: ''; 18 display: block; 19 width: 0; 20 height: 100%; 21 background: #b34b4b; 22 position: absolute; 23 top: 0; 24 left: 0; 25 transition: 0.6s cubic-bezier(0.76, 0, 0.24, 1);*/ 26} 27 28.en_hd_block_on::before{ 29 width: 100%; 30} 31 32.en_hd_block_end::before{ 33 width: 0; 34 left: auto; 35 right: 0; 36} 37 38コード
回答2件
あなたの回答
tips
プレビュー