jQuery prepend - 防止自动滚动

Posted

技术标签:

【中文标题】jQuery prepend - 防止自动滚动【英文标题】:jQuery prepend - prevent auto scroll 【发布时间】:2012-10-17 18:12:33 【问题描述】:

我只是在使用 jQuery prepend 并不能让它按预期工作。

我在做什么:

每隔一秒将一个.content div 添加到#main div

但是,当我向下滚动一点 [一旦页面充满了内容],我会不断滚动回到 #main 的顶部或最新的前置 .content

我该怎么做:

防止viewport 更改 - 就像在追加的情况下一样

相关fiddle

【问题讨论】:

视图没有改变;页面变得更长,因此从顶部的滚动距离是静态的,而整个页面长度变得动态更大(因此底部元素超出视口)。如果您一直滚动到页面底部,是否正在尝试使最后一个元素保持在视图中而不是“脱落”? @BradChristie 我基本上想要“什么是可见的”[滚动条除外,它显然应该改变]不管前置如何都不会改变。 【参考方案1】:

正如我在评论中解释的那样,滚动实际上并没有改变。窗口的滚动基于“与顶部的距离”(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 );
;

【讨论】:

而且,append 与 DfT 无关,我没有任何问题。对吗? @goldenparrot:并不是说它没有相关性,只是 append 不会向下移动很多元素。但是,如果您在一个页面上有两个列表,并且您一直将元素附加到顶部列表中,那么第二个列表的元素会发生变化,您也会遇到同样的问题。 @goldenparrot:我的意思是here 的一个例子(使用追加而不是前置)。请注意,它后面的内容现在很重要。 谢谢。我想我现在明白了要点。 这正是我想要的。感谢您提供有关“DfT”的解决方案和解释。 :D

以上是关于jQuery prepend - 防止自动滚动的主要内容,如果未能解决你的问题,请参考以下文章

Kivy Scrollview 自动滚动到新文本。防止向上滚动

如果自动布局打开,防止 UIScrollView 水平滚动

追加文本时如何防止文本框自动滚动?

在 WPF ListView 中,如何防止自动滚动?

Java / Swing:JScrollPane中的JTextArea,如何防止自动滚动?

有没有办法防止 ScrollView 在 TextView 获得焦点时自动滚动?