Ich habe folgendes Problem:überspringen aktive Klasse für bestimmte Elemente, wenn
ich einige Logik implementieren wollte die aktive Klasse auf Listenelemente in meiner Navigationsleiste zu setzen, während Scrollen. Ich verwenden, um diesen Schnipsel:
$(window).bind('scroll', function() {
var scrollPos = $(window).scrollTop() + 100;
$('#nav-menu a').each(function() {
var currLink = $(this);
var refElement = $(currLink.attr("href"));
currLink = currLink.parent();
if (refElement.position().top <= scrollPos) { //&& refElement.position().top + refElement.height() > scrollPos
$('.nav > li').removeClass("active");
currLink.addClass("active");
} else {
currLink.removeClass("active");
}
});
});
Es funktioniert gut, wenn ich scrollen und damit auch, wenn ich in der Navigationsleiste auf einen Link klicken. Angenommen, ich habe 5 Links, die sich auf 5 verschiedene Divs beziehen. Nehmen wir an, ich bin momentan an der Position des ersten Div.
Nun klicke ich auf den letzten Link und es scrollt durch die Divs. Aber jetzt erhält jede Verbindung dazwischen die aktive Klasse, während ich scrolle.
Können Sie eine Abhilfe vorschlagen, um die Links dazwischen zu überspringen?
EDIT: Dies ist der Click-to-Scroll-Codeteil:
// Page scroll
$('a.page-scroll').click(function() {
$(".nav > li").removeClass("active");
// $(this).parent().addClass("active");
if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') &&
location.hostname == this.hostname) {
var target = $(this.hash);
target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
if (target.length) {
$('html,body').animate({
scrollTop: target.offset().top - 40
}, 900);
return false;
}
}
});
ich den Click-to-Scroll-Code nicht hier sehen (nur der Scroll-Erkennungscode), aber ich könnte versuchen, eine Klasse zum 'body' Zugabe (wie' .scrolling'), wenn Sie Klick- Scrollen und Entfernen der Klasse, wenn die Scroll-Animation abgeschlossen ist. Dann könnten Sie im obigen Code überprüfen, ob 'body' die Klasse' .scrolling' hat und den Code nicht ausführt - stattdessen fügen Sie die '.active' Klasse manuell in den Callback des Click-to-Scrolls ein, wenn Sie die Body-Klasse entfernen. –
@CapitalQ hat die Frage bearbeitet, indem sie den Code zum Scrollen zu etwas hinzugefügt hat. Das Problem ist, wie füge ich Ihren Ansatz zu dieser Lösung hinzu? Das Problem ist, dass es immer die divs mit den Links vergleicht und sobald ich scrolle (und automatisch ein div erreiche), setzt es die aktive Klasse. – bash0ne