私はnavbarでスクロールしているページを持っています。そして、ユーザーがスクロールしているセクションをnavbarでハイライト表示します。現時点ではほぼ達成されていますが、間違ったリンクが強調されています。navbarの現在のセクションをハイライト表示
デモはhttp://codepen.io/meek/pen/NNprYb?editors=1000
でこれを実行するコードで、次のとおりです。
// highlight current tab
$(window).on("scroll", function() {
var currentPos = $(window).scrollTop();
$('.nav li a').each(function() {
var sectionLink = $(this);
var section = $(sectionLink.attr('href'));
if(section.position().top <= currentPos && sectionLink.offset().top + section.height() >= currentPos) {
$('.nav li').removeClass('active');
sectionLink.parent().addClass('active');
}
else {
sectionLink.parent().removeClass('active');
}
});
});
、私はいくつかのことを試してみたが、それは確実にアクティブなクラスを追加することができません正しいセッション。ヘルプは高く評価しました!
編集:問題が明確になるように、セクションをハイライト表示するのは、上部を右に移動するのではなく、上部をスクロールするときにセクションをクリックするだけですセクションは自動的に強調表示されません。
EDIT2:だからにif文を変更:問題を完全に固定されていないものの、
if(currentPos + $('#nav-wrapper').outerHeight() >= section.position().top && currentPos + $('#nav-wrapper').outerHeight() <= sectionLink.offset().top + section.outerHeight()) {
が改善してきました。自宅、ポートフォリオ、およびポートフォリオセクションはすべて、正しいリンクを強調表示しますが、連絡先は表示しません。
何かの理由でヘルプと種類の言葉がありがたいですが、何らかの理由で「連絡先」セクションがまだ強調表示されていません。なぜこれがあるのか知っていますか? – mlamp
ああ、navHeightセレクタを変更してnav-wrapper idを選択してください。違いはおそらく若干のdivパディングによって引き起こされる、わずかなピクセルの問題です。編集は私の答えです! –
正確には、$( '#navbar-wrapper')の高さは70pxで、$( '。navbar.navbar-default.navbar-static-top.affix')のサイズは69pxです。したがって、ロジックが接点リンクにアクティブな状態を追加するのを妨げていたのは1pxの違いでした。 –