2

使用Scroll/Follow Sidebar 帮助中的滚动/跟随侧边栏的 jquery 技术

$(function() {
    var $sidebar   = $(".sidebar"),
        $window    = $(window),
        $footer    = $(".footer"), // use your footer ID here
        offset     = $sidebar.offset(),
        foffset    = $footer.offset(),
        threshold  = foffset.top - $sidebar.height(), // may need to tweak
        topPadding = 15;

    $window.scroll(function() {
        if ($window.scrollTop() > threshold) {
            $sidebar.stop().animate({
                marginTop: threshold
            });
        } else if ($window.scrollTop() > offset.top) {
            $sidebar.stop().animate({
                marginTop: $window.scrollTop() - offset.top + topPadding
            });
        } else {
            $sidebar.stop().animate({
                marginTop: 0
            });
        }
    });
});

唯一的问题是当侧边栏(.sidebar)到达页脚(.footer)时,它会将页脚向下推到接近页脚的高度。
如果页脚高度为 200 像素,侧边栏将页脚推到 ~200 像素(Internet Explorer)、~50 像素(Firefox、Chrome、Opera)然后显示页脚。
内容和页脚之间 200 像素的空白是我真正的问题。
我希望侧边栏在页脚开始的位置停止滚动。

4

3 回答 3

2

也许更清洁的代码:

$(function() {
    var $sidebar   = $("#sidebar"), 
        $window    = $(window),
        offset     = $sidebar.offset(),
        topPadding = 15;

    $window.scroll(function() {
        if ($window.scrollTop() > offset.top) {
            $sidebar.stop().animate({
                marginTop: $window.scrollTop() - offset.top + topPadding
            }, 400);
        } else {
            $sidebar.stop().animate({
                marginTop: 0
            }, 400);
        }
    });
});

您可以更改400其他值以更改动画的持续时间(将其设置为 0,让侧边栏“不”设置动画)。

于 2013-12-03T15:38:03.803 回答
1

尝试

 threshold = foffset.top - $sidebar.height() - offset.top
于 2013-08-01T19:21:06.313 回答
0

这个问题太老了,在我阅读了其他答案后,我为我的情况做了这个。我希望这对后来的人有所帮助。

$(function() {
var $sidebar   = $("#sidebar"), 
$window    = $(window),
offset     = $sidebar.offset(),
topPadding = 15;
$window.scroll(function() {
if ($window.scrollTop() > offset.top) {
    if (($window.scrollTop())> ($("#following").offset().top + $("#following").height() - $sidebar.height())) {
        ;
    } else {
        $sidebar.stop().animate({
            marginTop: $window.scrollTop() - offset.top + topPadding
        }, 400);
    }

} else {
    $sidebar.stop().animate({
        marginTop: 0
    }, 400);
}
});
});

看图片

于 2015-05-12T00:41:25.550 回答