jQueryでスクロールと連動したメニューナビゲーションを実装
スクロールをした時に画面位置に合わせて、対応するページ内リンクメニューがcurrentに切り替わる仕組みを作成しております。
現在のソースでしたら、#content01 - #content04と目的とするコンテンツが4つと決め打ちしております。静的なサイトでしたら、問題がないのですが、contentが何個も増えることを想定しております。
現在のjqueryだと#contentが増えることが無理でして、どのようにjs(jquery)を記述するべきか悩んでおります。どなたかご教授お願い致します。
ソースを記します。
該当のソースコード
html
1 2<!-- コンテンツ部分 --> 3<div id="content01"> 4</div> 5<div id="content02"> 6</div> 7<div id="content03"> 8</div> 9<div id="content04"> 10</div> 11 12<!-- ナビゲーション部分 --> 13<ul id="nav"> 14 <li id="list01" class="current"><a href="#content01">コンテンツ1</a> 15 </li> 16 <li id="list02"><a href="#content02">コンテンツ2</a> 17 </li> 18 <li id="list03"><a href="#content03">コンテンツ3</a> 19 </li> 20 <li id="list04"><a href="#content04">コンテンツ4</a> 21 </li> 22</ul>
js
1$(window).on('load resize',function(){ 2 var pos01 = 0; 3 var pos02 = Math.round($("#content02").offset().top); 4 var pos03 = Math.round($("#content03").offset().top); 5 var pos04 = Math.round($("#content04").offset().top); 6 $(window).on('load resize scroll',function(){ 7 var posScroll = $(window).scrollTop(); 8 if(pos01 <= posScroll && posScroll < pos02) { 9 $("#nav li").removeClass('current'); 10 $("#list01").addClass('current'); 11 } else if(pos02 <= posScroll && posScroll < pos03) { 12 $("#nav li").removeClass('current'); 13 $("#list02").addClass('current'); 14 } else if(pos03 <= posScroll && posScroll < pos04) { 15 $("#nav li").removeClass('current'); 16 $("#list03").addClass('current'); 17 } else if(pos04 <= posScroll) { 18 $("#nav li").removeClass('current'); 19 $("#list04").addClass('current'); 20 } 21 }); 22});
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/06 14:23