为什么我的“ScrollSpy”函数中导航的最后一个子节点返回undefined值?

时间:2013-04-09 19:26:55

标签: jquery scroll scrolltop

我有一个我们以前见过的导航菜单,即根据当前滚动位置添加/删除一个类。

到目前为止,一切都运行得非常好,但是内容和导航中的最后一个“部分”都返回了未定义的值,而其余部分表现正确。

这是舞台网站的链接。

http://sites.atjayjo.com/cozy-two/frequently-asked-questions.php

这是我正在使用的JQuery:

var $sections = $('hgroup');
var $sectionsHead = $('hgroup h2');
var $navs = $('.faq-sidebar a');

var topsArray = $sections.map(function(){
    return $(this).position().top + 238;
}).get();

var len = topsArray.length;
var currentIndex = 0;

var getCurrent = function( top ) {
    for(var i = 0; i < len; i++) {
        if (top > topsArray[i] && topsArray[i+1] && top < topsArray[i+1] ) {
            return i;
        }
    }
};

$(window).scroll(function(e){
    var scrollTop = $(this).scrollTop();
    var checkIndex = getCurrent(scrollTop);;
    if (checkIndex !== currentIndex) {
        currentIndex = checkIndex;
        $navs.eq(currentIndex).addClass('active').siblings('.active').removeClass('active');
        $('hgroup h2').removeClass('active');
        $sectionsHead.eq(currentIndex).addClass('active');
        // console.log(alert(currentIndex));
    }
});

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

问题出在

if (top > topsArray...) 
由于表达式的评估,

行。

将行更改为:

if  ( top > topsArray[i] && (!topsArray[i+1] || top < topsArray[i+1]) )

并将其评估为三元表达式修复此问题。