修复jQuery ScrollTo和jQuery Waypoints的偏移量以使其正常工作

时间:2013-06-27 17:04:53

标签: jquery scrollto jquery-waypoints

我在我的网站上使用两个jQuery插件来完成两件事:

  1. jQuery Waypoints - 当我向下滚动页面并进入每个部分时,相应菜单链接下方的黑条变为白色:

    enter image description here

    1. jQuery ScrollTo - 当您点击其中一个主菜单链接时,我正在使用它来平滑各部分之间的滚动。
  2. 我的问题是,当我手动向下滚动页面时,相应的选定类会被添加到主菜单链接(如上所示将白条下方的条形图转换为Waypoint)。但是,当我单击主菜单上的实际链接时,直到我手动向下滚动一下它才会起作用。两个脚本都有一些偏移选项,我相信它可以使它正常工作,但我无法弄明白。我设置了一个jsFiddle(http://jsfiddle.net/j5Guz/)。这是我目前的jquery:

    $(function() {                    
      var sections = $('section');
      var navigation_links = $('nav a');
      sections.waypoint({
        handler: function(event, direction) {
            var active_section;
            active_section = $(this);
            if (direction === "up") active_section = active_section.prev();
            var active_link = $('nav a[href="#' + active_section.attr("id") + '"]');
            navigation_links.removeClass("selected");
            active_link.addClass("selected");
        },
        offset: '35%'
      });
    
        navigation_links.click( function(event) {
          $.scrollTo(
            $(this).attr("href"),
            {
              duration: 500,
              offset: { 'left':0, 'top':-0.15*$(window).height() }
            }
          );
        });
    
    });
    

1 个答案:

答案 0 :(得分:0)

jsFiddle似乎没有完全正常工作(当向下滚动时导航栏不会保持在视图中)但是我遇到了这个完全相同的问题,其中导航栏转换使用手动滚动,但是当点击时,不要相当不错的位置。

我的解决方案是使用Firebug检查导航栏元素,然后查看Layout选项卡,该选项卡将显示导航栏的确切总像素高度,包括填充和边距。然后,您可以将offset设置为与总像素高度相匹配。例如如果导航栏高度为85像素,那么在我的设置中,

<body id="the-page" data-target=".navbar" data-offset="85" data-spy="scroll">

此处,data-offset一旦正确,点击导航栏链接就会到达页面上的正确位置,并更改导航栏中突出显示的部分。