Jquery 关于javascript在页面滚动时突出显示菜单项的几何问题
在开发单页布局时,我尝试创建并使用第三方脚本在页面滚动时突出显示当前菜单项,基本上使用jQuery offset和scrollTop属性。无论涉及何种技术,大多数解决方案都依赖于此伪算法表示的基本逻辑:Jquery 关于javascript在页面滚动时突出显示菜单项的几何问题,jquery,algorithm,math,geometry,logic,Jquery,Algorithm,Math,Geometry,Logic,在开发单页布局时,我尝试创建并使用第三方脚本在页面滚动时突出显示当前菜单项,基本上使用jQuery offset和scrollTop属性。无论涉及何种技术,大多数解决方案都依赖于此伪算法表示的基本逻辑: FOR EACH page section DO{ IF (scroll top >= page section top) THEN{ HIGHLIGHT THE RESPECTIVE MENU ITEM BREAK } } 当您有较大的页面部分,大于
FOR EACH page section DO{
IF (scroll top >= page section top) THEN{
HIGHLIGHT THE RESPECTIVE MENU ITEM
BREAK
}
}
当您有较大的页面部分,大于窗口高度时,这种方法可以很好地工作。但是一旦你有了较小的部分,你就可以在窗口上显示两个(或更多)部分。这是该逻辑开始失败的时候,因为希望一次只突出显示一个菜单项,而不是两个。例如:
- 您可以单击一个菜单项,页面将滚动到该菜单项,但随后也会显示上一个/下一个部分,使脚本突出显示一个意外的菜单项
- 您在页面上的某个位置滚动,希望突出显示某些菜单项,但选择了“上一个/下一个”,因为它们各自的部分也会显示出来
next-section-top = page-section-top + page-section-height;
IF (scroll-top >= page-section-top && scroll-top < next-section-top) {
HIGHLIGHT page-section MENU ITEM
}
next section top=页面节顶+页面节高;
如果(滚动顶部>=页面部分顶部&滚动顶部<下一部分顶部){
突出显示页面部分菜单项
}
编辑:
你是对的-上面不会包括底部的小部分。。。但这将涵盖所有可能的情况:
var scrollPosition = scrollTop + (scrollTop/maxScroll*windowHeight);
IF (scrollPosition >= page-section-top && scrollPosition < next-section-top) {....}
var scrollPosition=scrollTop+(scrollTop/maxScroll*windowHeight);
如果(scrollPosition>=页面节顶&&scrollPosition<下一节顶){..}
在您的代码中-它将是这样的:是的,它工作得不好-但我编辑了答案-现在就可以了;)