【发布时间】:2012-05-27 00:06:40
【问题描述】:
我想得到它,这样我侧边栏上的最后一个 div 在页面滚动时保持粘性,但在页脚处停止。我几乎可以使用online tutorial,但是当 disqus cmets 加载时计算会出错,并且只会到某个点。
这是一个工作版本http://jsfiddle.net/k56yR/1/,但是有没有一种简单的方法来做一些事情,比如计算页脚高度,然后告诉它停止滚动到离页面底部那么远的地方?
【问题讨论】:
我想得到它,这样我侧边栏上的最后一个 div 在页面滚动时保持粘性,但在页脚处停止。我几乎可以使用online tutorial,但是当 disqus cmets 加载时计算会出错,并且只会到某个点。
这是一个工作版本http://jsfiddle.net/k56yR/1/,但是有没有一种简单的方法来做一些事情,比如计算页脚高度,然后告诉它停止滚动到离页面底部那么远的地方?
【问题讨论】:
我认为您的问题是您的 $('#footer').offset().top 值在您的 disqus cmets 加载后发生了变化。因此,您需要在 cmets 加载后或每次触发事件时更新 footerTop(和 limit 基于新的 footerTop 值)。
类似:
$(function(){ // document ready
if ($('#sticky').length) { // make sure "#sticky" element exists
var el = $('#sticky');
var stickyTop = $('#sticky').offset().top; // returns number
var stickyHeight = $('#sticky').height();
$(window).scroll(function(){ // scroll event
var limit = $('#footer').offset().top - stickyHeight - 20;
var windowTop = $(window).scrollTop(); // returns number
if (stickyTop < windowTop){
el.css({ position: 'fixed', top: 0 });
}
else {
el.css('position','static');
}
if (limit < windowTop) {
var diff = limit - windowTop;
el.css({top: diff});
}
});
}
});
与大多数情况一样,有一个用于此的 jQuery 插件,正如julianm 在他的评论中指出的那样,here 可用。它还支持一个stopper值,将sticky box停在任何需要的位置。
【讨论】: