我编写了一个脚本,一旦通过某个点,我的导航就会粘在屏幕顶部。它工作得很好所以我决定尝试编写另一个脚本,突出显示导航到达页面部分的部分。唯一的问题是我估计每个部分的像素数量。我知道我可以使用jQuery .offset()来使这更精确,但我不知道如何在我当前的脚本中编写它。下面是相关的HTML和javaScript。我真的很感激任何可靠的建议。感谢。
<nav class='pink-bar'><!--<img class='nav' src='assets/nav.png' alt='navigation bar' /> -->
<div class='content'>
<ul class='menu'>
<li id='menu-1'>Home</li>
<li id='menu-2'>Buy The Experience</li>
<li id='menu-3'>Barter</li>
<li id='menu-4'>Preview</li>
<li id='menu-5'>About</li>
</ul>
$(function() {
var num = 460; //number of pixels before modifying styles
var num2 = 2862;
var num3 = 3715;
var num4 = 4510;
$(window).on('scroll', function () {
if ($(window).scrollTop() > num4)
{ $('.pink-bar').addClass('fixed');
$('#menu-5').addClass('ScrollNav');
$('#menu-4, #menu-3, #menu-2,').removeClass('ScrollNav');
} else if ($(window).scrollTop() > num3)
{ $('.pink-bar').addClass('fixed');
$('#menu-4').addClass('ScrollNav');
$('#menu-5, #menu-3, #menu-2 ').removeClass('ScrollNav');
} else if ($(window).scrollTop() > num2)
{ $('.pink-bar').addClass('fixed');
$('#menu-3').addClass('ScrollNav');
$('#menu-4, #menu-5, #menu-2').removeClass('ScrollNav');
} else if ($(window).scrollTop() > num) {
$('.pink-bar').addClass('fixed');
$('#menu-2').addClass('ScrollNav');
$('#menu-3, #menu-5, #menu-3').removeClass('ScrollNav');
} else {
$('.pink-bar').removeClass('fixed');
$('#menu-2, #menu-3, #menu-4, #menu-5').removeClass('ScrollNav');
}
});
});
答案 0 :(得分:0)
怎么样:
var num = $('#menu-1').offset().top;
var num2 = $('#menu-2').offset().top;
根据风格的不同,您可能需要稍微调整一下以考虑边距和边框。
更好的方法是将所有菜单项分配给一个类,然后使用$('.menu-class').each(...)
遍历它们,并根据它们(调整后的偏移量)和当前位置决定做什么。这将使其可扩展到更多元素。