基本上我当前有一个div保持固定并跟随用户滚动直到达到某一点。我可以很容易地让它停在一个固定的像素位置,就像我在下面的例子中所做的那样,但因为我是一个jQuery白痴,我不知道如何让它停在div处。
以下是我到目前为止所使用的内容:
var windw = this;
$.fn.followTo = function ( pos ) {
var $this = this,
$window = $(windw);
$window.scroll(function(e){
if ($window.scrollTop() > pos) {
$this.css({
position: 'absolute',
top: pos
});
} else {
$this.css({
position: 'fixed',
top: 0
});
}
});
};
$('#one').followTo(400);
以下是示例:jsFiddle
我希望它一旦到达第二个div就停止的原因是因为我使用的流畅布局,第二个div将根据浏览器大小坐在不同的点。为它停止定义一个特定点将不起作用。任何人都有任何想法,我怎么能得到这样做我想要的?或者,固定div是否可以在达到一定百分比时停止滚动?我环顾四周但没找到任何东西。
感谢您的帮助。
答案 0 :(得分:8)
这是你在找什么?
http://jsfiddle.net/Tgm6Y/1447/
var windw = this;
$.fn.followTo = function ( elem ) {
var $this = this,
$window = $(windw),
$bumper = $(elem),
bumperPos = $bumper.offset().top,
thisHeight = $this.outerHeight(),
setPosition = function(){
if ($window.scrollTop() > (bumperPos - thisHeight)) {
$this.css({
position: 'absolute',
top: (bumperPos - thisHeight)
});
} else {
$this.css({
position: 'fixed',
top: 0
});
}
};
$window.resize(function()
{
bumperPos = pos.offset().top;
thisHeight = $this.outerHeight();
setPosition();
});
$window.scroll(setPosition);
setPosition();
};
$('#one').followTo('#two');
编辑:关于你要求不滚动到某一点的请求,只需替换它:
if ($window.scrollTop() > (bumperPos - thisHeight)) {
用这个:
if ($window.scrollTop() <= (bumperPos - thisHeight)) {
答案 1 :(得分:2)
受到MicronXD小提琴的启发,但是当DOM在文档负载(或其他原因)上被大量推动时写得更灵活,这是我为自己的用法开发的另一个类似的解决方案:
jQuery.fn.extend({
followTo: function (elem, marginTop) {
var $this = $(this);
var $initialOffset = $this.offset().top;
setPosition = function() {
if ( $(window).scrollTop() > $initialOffset ) {
if ( elem.offset().top > ( $(window).scrollTop() + $this.outerHeight() + marginTop ) ) {
$this.css({ position: 'fixed', top: marginTop });
}
if ( elem.offset().top <= ( $(window).scrollTop() + $this.outerHeight() + marginTop ) ) {
$this.css({ position: 'absolute', top: elem.offset().top - $this.outerHeight() });
}
}
if ( $(window).scrollTop() <= $initialOffset ) {
$this.css({ position: 'relative', top: 0 });
}
}
$(window).resize( function(){ setPosition(); });
$(window).scroll( function(){ setPosition(); });
}
});
然后你可以这样运行这个函数:
$('#div-to-move').followTo( $('#div-to-stop-at'), 60);
60是您希望浮动元素在位置时从屏幕顶部具有的可选边距:固定,以像素表示。