###ソースコードをまとめたい(短くしたい)
ブラウザー画面の1/2を通過したらclassを追加。→cssで指定したアニメーションが作動。
という、スクロールイベントを記述しました。
以下の実装例で問題ないく動いています。
しかし下記のままだと、スクロールイベントさせたいコンテンツが増えた際、記述を追加していかないとないりません。それが20個30個と増えていくと、とてつもない長さになって、手間がかかるうえに、容量が重くなります。
別のイベント用いて、Javascriptで同じ処理を関数でまとめる方法があるということ知りましたが、ソースコードを見ただけでは理解できないできませんでいした。
関数でまとめる際のポイントまたは、別の方法でまとめる方法があれば、
解説込みでアドバイスをいただけるとうれしいです。
###実装例
読み込みファイル
「jQuery v1.9.1」
HTML
1<main> 2 <div class="space"></div> 3 4 <div id="scroll_area01" class="test_wrap clearfix"> 5 <div></div> 6 <div></div> 7 </div> 8 <div id="scroll_area02" class="test_wrap clearfix"> 9 <div></div> 10 <div></div> 11 </div> 12 13 <div class="space"></div> 14</main>
CSS
1main { 2 max-width: 900px; 3 margin: 0 auto; 4} 5.space{ 6 width: 100px; 7 height: 500px; 8} 9.clearfix:after { 10 content: ""; 11 clear: both; 12 display: block; 13} 14 15.test_wrap{ 16 margin-bottom: 100px; 17} 18.test_wrap div{ 19 width: 100px; 20 height: 100px; 21 background: #ccc; 22 float: left; 23 margin-right: 20px; 24 transition-property: all; 25 transition-duration: 1s; 26 transition-timing-function: ease; 27} 28.test_wrap div.motion{ 29 background: #000; 30}
javascript
1$(window).scroll(function(){ 2 // トリガー | window3/4 = (window.innerHeight*3/4) 3 var trigger = $(document).scrollTop() + (window.innerHeight/2); 4 5 // ターゲット 6 var target01 = $("#scroll_area01 div"), 7 pointer01 = $("#scroll_area01").offset().top; 8 // モーション 9 if(trigger > pointer01){ 10 target01.addClass("motion"); 11 } else { 12 target01.removeClass("motion"); 13 } 14 15 // ターゲット 16 var target02 = $("#scroll_area02 div"), 17 pointer02 = $("#scroll_area02").offset().top; 18 // モーション 19 if(trigger > pointer02){ 20 target02.addClass("motion"); 21 } else { 22 target02.removeClass("motion"); 23 } 24});
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/07/07 14:03