Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 关于javascript在页面滚动时突出显示菜单项的几何问题_Jquery_Algorithm_Math_Geometry_Logic - Fatal编程技术网

Jquery 关于javascript在页面滚动时突出显示菜单项的几何问题

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 } } 当您有较大的页面部分,大于

在开发单页布局时,我尝试创建并使用第三方脚本在页面滚动时突出显示当前菜单项,基本上使用jQuery offset和scrollTop属性。无论涉及何种技术,大多数解决方案都依赖于此伪算法表示的基本逻辑:

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<下一节顶){..}


在您的代码中-它将是这样的:

是的,它工作得不好-但我编辑了答案-现在就可以了;)