いつもお世話になっております。
今回はjsの正しい書き方についてお聞きしたく、ご質問をさせていただきます、
現状
ヘッダーが追従ナビゲーションになっており、スクロールするとナビゲーションに
カレントclassが付与される仕組みです。
動作の方は問題なく動いております。
問題点
jsの書き方が冗長であるため、どのように、記述すれば綺麗にかけますでしょうか。
自分にとっての難点が、メニューにない部分はカレントclassを付けないため、メニューの関係無いスクロール量の場合は
カレントを消すようにしています。ここの部分の書き方が冗長的です。また、.eq(n)でclassを与えてるため、メニューが
増えたり減ったりした場合、番号をずらさないといけないため、応用が効かない書き方とも思っています。
無駄のない書き方があればご教授していただければ幸いです。
DEMOをアップ致しました。
HTML
<!doctype html> /*~省略~*/ <body id="top"> <header> <nav> <ul> <li class="current"><a href="#top">1番</a></li> <li><a href="/hoge/">2番</a></li> <li><a href="#03">3番</a></li> <li><a href="#04">4番</a></li> <li><a href="#05">5番</a></li> <li><a href="#06">6番</a></li> </ul> </nav> </header> <main> <article> <section class="col1">セクション01</section> <section class="col2">セクション02</section> <section class="col3" id="03">3番</section> <section class="col4" id="04">4番</section> <section class="col5" id="05">5番</section> <section class="col1">セクション</section> <section class="col2">セクション</section> <section class="col3">セクション</section> <section class="col4" id="06">6番</section> <section class="col5">セクション</section> </article> </main> <script src="https://code.jquery.com/jquery-1.12.4.js" integrity="sha256-Qw82+bXyGq6MydymqBxNPYTaUXXq7c8v3CwiYwLLNXU=" crossorigin="anonymous"></script> <script src="/js/main.js"></script> </body> </html>
js
$(function(){ var header = ('header'); var headerheight = $(header).outerHeight(); var heightFunc = function () { var mainheight = $('main').css('padding-top', headerheight); } heightFunc(); $('a[href^="#"]').on('click', function () { var Href; var position ; Href = $(this).attr("href"); position = $(Href).offset().top; $('body,html').animate({ scrollTop: position - headerheight }, 800, 'swing'); return false; }); var currentFunc = function () { var sectionTop = new Array; var nowScroll; $('section').each(function (i) { sectionTop[i] = $(this).offset().top; sectionTop[i] = sectionTop[i] - headerheight; }); $(window).scroll(function () { nowScroll = $(window).scrollTop(); if (sectionTop[0] <= nowScroll && sectionTop[1] > nowScroll) { $('header nav ul li').eq(0).addClass('current'); } else { $('header nav ul li').eq(0).removeClass('current'); } if (sectionTop[2] <= nowScroll && sectionTop[3] > nowScroll) { $('header nav ul li').eq(2).addClass('current'); } else { $('header nav ul li').eq(2).removeClass('current'); } if (sectionTop[3] <= nowScroll && sectionTop[4] > nowScroll) { $('header nav ul li').eq(3).addClass('current'); } else { $('header nav ul li').eq(3).removeClass('current'); } if (sectionTop[4] <= nowScroll && sectionTop[5] > nowScroll) { $('header nav ul li').eq(4).addClass('current'); } else { $('header nav ul li').eq(4).removeClass('current'); } if (sectionTop[8] <= nowScroll && sectionTop[9] > nowScroll) { $('header nav ul li').eq(5).addClass('current'); } else { $('header nav ul li').eq(5).removeClass('current'); } }); } currentFunc(); });

回答4件
あなたの回答
tips
プレビュー