Я написал собственный скрипт, который проверяет текущую позицию в окне просмотра, а затем соответственно выделяет текущий элемент в фиксированной навигации заголовка.jQuery улучшить производительность функции
Порядок элементов навигации совпадает с порядком объявления переменных смещения.
Я вызываю эту функцию на scroll()
, но у меня такое ощущение, что это не лучший результат, поскольку он проверяет все время, когда пользователь прокручивает. Может быть, лучший подход может быть, например, проверить в конце события прокрутки? Но я не мог найти способ реализовать это.
Есть ли у вас какие-либо идеи о том, как улучшить производительность функциональности?
Вот мой код:
$window = $(window);
$window.scroll(function() {
activeState();
}
);
function activeState() {
var offsetHome = $('#Home').position().top;
var offsetLeistungen = $('#Leistungen').position().top;
var offsetPortfolio = $('#Portfolio').position().top;
var offsetUeber = $('#Ueber').position().top;
var offsetKontakt = $('#Kontakt').position().top;
var headerHeight = $('.header').height();
$('#PrimNav li').removeClass('active');
if($window.scrollTop() <= offsetLeistungen - headerHeight) {
$('#PrimNav li:nth-child(1)').addClass('active');
} else if($window.scrollTop() <= offsetPortfolio - headerHeight) {
$('#PrimNav li:nth-child(2)').addClass('active');
} else if($window.scrollTop() <= offsetUeber - headerHeight) {
$('#PrimNav li:nth-child(3)').addClass('active');
} else if($window.scrollTop() <= offsetKontakt - headerHeight) {
$('#PrimNav li:nth-child(4)').addClass('active');
} else {
$('#PrimNav li:nth-child(5)').addClass('active');
}
};
Спасибо!
Спасибо за ваш ответ. К сожалению, вы меня неправильно поняли, позиция элементов не фиксирована, фиксирована позиция навигации заголовка, где я выделяю текущий элемент, способный видеть. Позиция #Home, #Leistungen, .. находится где-то на странице и может меняться, когда пользователь перемещает страницу. Но я использовал ваш '$ window.scrollTop()' в вызове функции 'activeState()'. – Sebsemillia
В этом случае вы все равно можете разделить объявление и присвоение. См. Обновленный код выше. – zfor
Да, это имеет смысл! Я подожду до завтра и посмотрю, даст ли кто-то другой свое мнение, и я решит, какой ответ принять. Но сейчас ты впереди ..;) Спасибо! – Sebsemillia