初めてここにいるユーザー。私は通常、質問の答えを見つけることができますが、これを理解するのは難しい時期です。jQueryを使用して現在表示されている要素を見つけてナビゲーションを更新
目標:
私は、ページ上の要素までスクロールダウンしますクリックするサイドバーナビゲーションを持つ単一のページレイアウトを持っています。しかし、ユーザーがページを特定の要素にスクロールした場合、#id
私は.active
になります。ナビゲーションリンクと対応する要素は、element#id
とa[name]
で同じ値を共有します。以下NikeBetterWorld.com
HTML例::と同様に
<nav>
<a name="value">Link</a>
</nav>
<section id="value">
content goes here
</section>
もちろん、そこに複数のセクション、リンク、要素、などがあります。しかし、これはそれの要点です。したがって、ユーザーがsection#value
にスクロールすると、a[value]
はクラスをアクティブにします。
私はこれまでのところ、幾分助けになった回答を見つけましたが、まだいくつかの問題があります。 See this link for more information。
現在Javascriptを/ jQueryの:
$(document).scroll(function() {
var cutoff = $(window).scrollTop();
var cutoffRange = cutoff + 200;
// Find current section and highlight nav menu
var curSec = $.find('.current');
var curID = $(curSec).attr('id');
var curNav = $.find('a[name='+curID+']');
$(curNav).addClass('active');
$('.section').each(function(){
if ($(this).offset().top > cutoff && $(this).offset().top < cutoffRange) {
$('.section').removeClass('current')
$(this).addClass('current');
return false; // stops the iteration after the first one on screen
}
});
});
問題:
上記のコードは、私は一つの大きな問題に実行しています限り動作しますが。 .current
の残りの要素全体を取得するのに問題があります。要素の上端がウィンドウの外に出ると、クラスが失われます。私は新しい要素の範囲を追加することでそれを修正しましたが、ユーザーが上にスクロールすると、要素の先頭がウィンドウの上部に達するまで、前の要素はクラス.current
を取得しません。ウィンドウの支配的な部分が目に見えて、.current
クラスを獲得したら、私はそれを好むでしょう。
ご意見、ご提案、ご感想をお待ちしております。
ありがとうございます!
これは私が今まで見た中で最もクールなウェブサイトの1つです。 – Kayla