我正在尝试在我的网站上实现此功能,因此导航样式会随着您滚动到相应部分而发生变化。

http://stanhub.com/sticky-header-change-navigation-active-class-on-page-scroll-with-jquery/

我可以看到的唯一区别是,我创建的导航栏在到达页面顶部后变得发粘。

当我扔一个

console.log(refElement.position())


我明白了

Object {top: 716.984375, left: 50.5}
Object {top: 1811.796875, left: 50.5}


我收到错误

"Uncaught TypeError: Cannot read property 'top' of undefined" on from function.


在这行上:

if (refElement.position().top <= scrollPos && refElement.position().top + refElement.height() > scrollPos) {


这是剧本

$(document).ready(function() {

    $(document).on("scroll", onScroll);

    function onScroll(event){
    var scrollPos = $(document).scrollTop();
    $('.cn17w1.original a').each(function () {
        var currLink = $(this);
        var refElement = $(currLink.attr("href"));
        if (refElement.position().top <= scrollPos && refElement.position().top + refElement.height() > scrollPos) {
            $('.cn17w1.original ul li a').removeClass("active");
            currLink.addClass("active");
        }
        else{
            currLink.removeClass("active");
        }
    });
    }
});

最佳答案

var refElement = $(currLink.attr("href"));

这将返回一个空的jQuery集,当对它调用position()时,它将返回未定义。 $(currLink.attr("href"))的原因不是选择DOM元素,而是选择任意文本,特别是href元素的currLink属性值。

10-07 21:59