偏移不起作用::无法读取未定义的属性“top”

时间:2014-01-28 22:20:03

标签: jquery offset

不确定为什么它无法读取未定义的属性顶部。有人给了我这个代码,我正在重建网站的一部分。它事先工作,所以不确定是什么改变得到这个错误。如果您需要更多信息,请与我们联系。

HTML

    <aside class="side-nav-track">
        <ul>
            <li><a class="link0 active" href="#ch0">00 _ Introduction</a></li>
            <li><a class="link1" href="#ch1">01 _ E-Commerce Trends</a></li>
            <li><a class="link2" href="#ch2">02 _ Millennial Purchasing</a></li>
            <li><a class="link3" href="#ch3">03 _ The Vision</a></li>
        </ul>
        <img class="akqa-logo" src="images/logos/logo-akqa.png">
    </aside>

$(document).ready(function(){     $( '主体')隐藏()淡入(1500);

// Side nav active classes
$(window).scroll(function(){

    var a = $('header').height();
    var b = $('#00').height();
    var c = $('#01').height();
    var d = $('#02').height();
    var e = $('#03').height();
    var y = $(window).scrollTop();

    if( y > 0-100 && y < a+b-200 ){
    $( ".link0").addClass( 'active' );
    }
    else    {
        $( ".link0").removeClass( 'active' );
    }

    if( y > a+b-200 && y < a+b+c-200 ){
    $( ".link1").addClass( 'active' );
    }
    else    {
        $( ".link1").removeClass( 'active' );
    }

    if( y > a+b+c-200 && y < a+b+c+d-200 ){
    $( ".link2").addClass( 'active' );
    }
    else    {
        $( ".link2").removeClass( 'active' );
    }

    if( y > a+b+c+d-200 && y < a+b+c+d+e-10 ){
    $( ".link3").addClass( 'active' );
    }
    else    {
        $( ".link3").removeClass( 'active' );
    }
});

// Page Scroll Transitions

$(".side-nav-track a").click(function() {
    event.preventDefault();
    var link = $(this).attr('href');
    $('body, html').animate({
        scrollTop: $(link).offset().top
    }, 500);
});

$(".section-link").click(function() {
    event.preventDefault();
    var link = $(this).attr('href');
    $('body, html').animate({
        scrollTop: $(link).offset().top - 59
    }, 500);
});

});

3 个答案:

答案 0 :(得分:1)

您的链接变量是一个字符串。字符串没有偏移。仔细查看链接变量,它是元素的href属性,而不是元素。改为,

var link = $(this);

答案 1 :(得分:0)

任何时候我使用它,你必须首先收集到offset,然后你就可以获得top。 为什么收集href?这不会返回任何offset,因为它是string

$(".side-nav-track a").click(function() {
    event.preventDefault();
    // var link = $(this).attr('href');
    var $this = $(this),
        thisOffset = $this.offset(),
        thisTop = thisOffset.top;
    console.log(thisTop);
    $('body, html').animate({
        scrollTop: thisTop + 'px'
    }, 500);
});

$(".section-link").click(function() {
    event.preventDefault();
    var link = $(this).attr('href');
    $('body, html').animate({
        scrollTop: $(link).offset().top - 59
    }, 500);
});

这也是第一个示例在文档http://api.jquery.com/offset/

中的工作原理

答案 2 :(得分:0)

我发现这个区域开始工作,还有另一个区域我错误地定义了“这个”。上面提到的问题绝不相关。