2012-10-17 61 views
5

我刚刚与jQuery prepend工作,并无法让其按预期工作。jQuery prepend - 防止自动滚动

我在做什么:

前面加上一个.content div来#main DIV每隔一秒

但是,当我稍微向下滚动[一旦页面充满了内容] ,我一直滚动回#main的顶部或最新预先.content

如何做我:

。防止viewport更改 - 就像在追加

相关fiddle

+1

的观点并没有改变;页面变得更长,所以从顶部滚动距离是静态的,而整个页面长度变得动态变大(因此底部元素超出了视口)。正试图做到这一点,如果你一直滚动到页面底部,最后一个元素保持在视图中而不是“脱落”? –

+0

@BradChristie我基本上想'什么是visibile'[除了滚动条,显然应该改变],根本不要改变,而不管前置。 – Prasanth

回答

13

正如我在评论解释的情况下,滚动实际上并没有改变。该窗口的滚动基于“距离顶部”(DfT)。也就是说,如果你没有滚动条,你的DfT就是0.一旦滚动条被引入,你现在有一段距离可以使用。

由于内容越来越长,视口只有很多像素高,某些内容会从页面底部“脱落”(预先将DfT降低到新元素的高度)。

我能想到的最佳方式是用新元素的高度来对抗它。这使您可以滚动到某个位置,然后在添加新元素时相应地修改滚动位置。

这里是我的意思的例子:http://jsfiddle.net/bradchristie/66RvC/1/

和代码(仅供参考):

var f = function(){ 
    var t = $(window).scrollTop(),  // Window's current scroll position 
     $d = $(d()).prependTo('#main'), // store the new element 
     h = $d.outerHeight();   // also get its height 
    if (t){        // Only adjust if they've scrolled 
     $(window).scrollTop(t + h);  // add the delta to the scroll position 
    } 
    setTimeout(f, 1000); 
}; 
+0

而且,追加与DfT无关,我没有任何问题。对? – Prasanth

+0

@goldenparrot:并不是说它没有任何关联,只是这个附加并没有将很多元素向下移动。但是,如果您在页面上有两个列表,并且您不断将元素附加到列表顶部,则第二个列表的元素会发生变化,您也会遇到同样的问题。 –

+1

@goldenparrot:我的意思[这里]的示例(http://jsfiddle.net/bradchristie/66RvC/3/)(使用append而不是前置)。现在注意它与内容之后的内容。 –