2012-10-17 101 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而不是前置)。現在注意它與內容之後的內容。 –