jQuery - 仅当顶部不可见时滚动到元素的顶部

时间:2015-03-15 18:46:45

标签: javascript jquery scroll

假设我有一堆盒子,每个盒子底部都包含“滚动到顶部”链接。感谢各种答案中发布的代码,我能够很好地完成滚动工作:

<div class="box" style="height: 500px;">
    <p>some tall box</p>
    <span class="scroll-link">scroll to top of box</span>
</div>
$('.scroll-link').on('click', function () {

    var $parent = $(this).parent();
    $('html, body').animate({
        scrollTop: $parent.offset().top
    }, 'slow');

});

http://jsfiddle.net/L1d394ev/5/

然而,我还有一件事需要做,那就是我坚持的地方:如果框中的顶部不可见,我只想滚动。 (准确地说,太高可见。)

我已尝试在this answer中发布的代码 - 如果您取消注释if,这在我的JSfiddle中很明显 - 但这似乎完全禁用了滚动。

我想我需要做的是检查元素的顶部是否太高而不可见,但是如何做到这一点,我不知道。

1 个答案:

答案 0 :(得分:4)

您的问题是计算偏移的方式:

$('.scroll-link').on('click', function () {
    var $parent = $(this).parent();
    // Get the offset alone
    var offset = $parent.offset().top;
    // If the offset is less than the scroll position
    if (offset < $(window).scrollTop()) {
        $('html, body').animate({
                      // reuse your 'offset' variable instead of calculating it again
            scrollTop: offset
        }, 'slow');
    }
});

Updated JS Fiddle Demo