Javascript 突出显示滚动条上的活动菜单项

Javascript 突出显示滚动条上的活动菜单项,javascript,jquery,css,Javascript,Jquery,Css,我正在使用jQuery进行一页导航。我想要的是,当用户滚动时,突出显示的菜单将被更改。我想出了以下代码: HTML 标题1 标题2 Donec sed odio dui。精英自由主义者,法雷特拉·奥古斯。 我不知道是谁干的,我不知道是谁干的。 莫里斯·德赖特 两人或两人在一起是因为他们在一起是因为他们在一起 欧盟福吉亚无法定权利。除圣奥卡塔铜矿场意外, 这是我的错,因为我的母亲是我的母亲。 所有人都能清楚地看到错误所在。 议程 多奈克·奎斯·森佩尔·麦格纳。短暂的

我正在使用jQuery进行一页导航。我想要的是,当用户滚动时,突出显示的菜单将被更改。我想出了以下代码:

HTML


标题1 标题2 Donec sed odio dui。精英自由主义者,法雷特拉·奥古斯。
我不知道是谁干的,我不知道是谁干的。 莫里斯·德赖特 两人或两人在一起是因为他们在一起是因为他们在一起
欧盟福吉亚无法定权利。除圣奥卡塔铜矿场意外,
这是我的错,因为我的母亲是我的母亲。
所有人都能清楚地看到错误所在。

议程 多奈克·奎斯·森佩尔·麦格纳。短暂的欢乐时光。
普罗因·奎斯·厄罗斯·多洛。多内克·塞德·维尼纳提斯·埃尼姆。

加莱里杰 多奈克·奎斯·森佩尔·麦格纳。短暂的欢乐时光。
普罗因·奎斯·厄罗斯·多洛。多内克·塞德·维尼纳提斯·埃尼姆。

组织 多奈克·奎斯·森佩尔·麦格纳。短暂的欢乐时光。
普罗因·奎斯·厄罗斯·多洛。多内克·塞德·维尼纳提斯·埃尼姆。

联系
JS

//更新当前项目类
函数setActiveListElements(事件){
var windowPos=$(window.scrollTop();
$('#主NAVA[href^=“#”]”)。每个(函数(){
var currentLink=$(此);
var refElement=$(currentLink.attr(“href”);
if(refElement.position()窗口位置){
$('a').removeClass(“当前”);
currentLink.addClass(“当前”);
}
否则{
currentLink.removeClass(“当前”);
}
});
}
//滚动条上的更新菜单项
$(窗口)。滚动(函数(){
//调用函数
setActiveListElements();
});

这段代码的问题是我收到了错误:
uncaughttypeerror:无法读取未定义的
的属性“top”

我还没有找到解决办法。

以下是答案:

    // The id of the section we want to go to.
    var anchorId = $(this).attr("href");

    // Our scroll target : the top position of the
    // section that has the id referenced by our href.
    if (anchorId.length > 1 && $(anchorId))
    {
     var target = $(anchorId).offset().top - offset;
    }
    else
    {
     var target = 0;
    }
当链接只有
#
时,就没有锚定。它指的是页面的顶部,但没有附加锚元素。因此,获取未定义的顶点是不可能的。此代码现在检查
href
长度是否大于1(例如:
#test
),以及页面上是否有具有实际id的元素。如果是,则计算偏移量,如果不是,则将偏移量设置为
0
。也就是说,返回到页面顶部

事实上,相同类型的答案适用于突出问题。它使用
home
nav按钮选择文档,因为它没有链接到节元素。jQuery不会返回有效的选择,并且
position()
将失败

function setActiveListElements(event){
    var windowPos = $(window).scrollTop();
    $('#primary-navwrapper li a[href^="#"]').each(function() { 

        var currentLink = $(this);
        if ($(currentLink.attr("href")).length > 0)
            {
            var refElement = $(currentLink.attr("href"));
            if (refElement.position().top <= windowPos && (refElement.position().top + refElement.height() + $("#primary-navwrapper").height() ) > windowPos) {
                $('#primary-navwrapper li a').removeClass("current");
                currentLink.addClass("current");
            }
            else{
                currentLink.removeClass("current");
            }
        }
    });
}
函数setActiveListElements(事件){
var windowPos=$(window.scrollTop();
$('#主NAVA[href^=“#”]”)。每个(函数(){
var currentLink=$(此);
如果($(currentLink.attr(“href”)).length>0)
{
var refElement=$(currentLink.attr(“href”);
if(refElement.position().top windowPos){
$('a').removeClass(“当前”);
currentLink.addClass(“当前”);
}
否则{
currentLink.removeClass(“当前”);
}
}
});
}
再次检查选定图元是否有链接的截面图元,如果有,请继续


如果没有HTML,这是很困难的。但是
position()
返回未定义的某个位置。请参阅更新的问题。我真的希望这些不是手动注释。导航链接已经起作用了。唯一的问题是它不会更新突出显示的类。。。所以这篇文章不需要上面的代码。@Caspert好吧,如果我点击主页按钮,我会得到
uncaughttypeerror:cannotrea
    // The id of the section we want to go to.
    var anchorId = $(this).attr("href");

    // Our scroll target : the top position of the
    // section that has the id referenced by our href.
    if (anchorId.length > 1 && $(anchorId))
    {
     var target = $(anchorId).offset().top - offset;
    }
    else
    {
     var target = 0;
    }
function setActiveListElements(event){
    var windowPos = $(window).scrollTop();
    $('#primary-navwrapper li a[href^="#"]').each(function() { 

        var currentLink = $(this);
        if ($(currentLink.attr("href")).length > 0)
            {
            var refElement = $(currentLink.attr("href"));
            if (refElement.position().top <= windowPos && (refElement.position().top + refElement.height() + $("#primary-navwrapper").height() ) > windowPos) {
                $('#primary-navwrapper li a').removeClass("current");
                currentLink.addClass("current");
            }
            else{
                currentLink.removeClass("current");
            }
        }
    });
}