2012-05-02 64 views
1

考慮的jQuery的下面幾行:如何滾動分離的對象?

var $s = $('<span><span class="one"><span class="two"></span></span></span>'); 

$('.one', $s).css('border', 'solid 1px black').scrollLeft(200); 
$('.one', $s).css('border', 'solid 1px blue').scrollTop(200); 

$(document.body).append($s); 

現在我想做些滾動以前的元素被附加到DOM(由於視覺要求),但滾動條保持在0 如何我可以在元素附加到DOM之前滾動元素嗎?

JS小提琴例如:http://jsfiddle.net/KeesCBakker/gQbkw/1/

回答

0

除非將元素附加到DOM,否則不能滾動元素,因爲瀏覽器不知道它的尺寸,以及它是否可以滾動或滾動多少。

2
  1. 的元素添加到體的絕對位置
  2. 設置的頂部和左到一個地方關閉屏幕
  3. 滾動元件
  4. 將其附加到正確的位置並刪除絕對位置

哦,還有一件事,而不是使用CSS設置邊界 - 把它放在一個類

編輯:你對IE的評論如下這裏是一個解決方案http://jsfiddle.net/gQbkw/4/
我用另一格的集裝箱,這是一個簡化的解決方案,檢查它在IE9和鉻

+4

換句話說,除非將元素附加到DOM,否則不能滾動元素,因爲瀏覽器不知道它的尺寸,是否可以滾動或滾動多少。 –

+0

另一個附加將重置滾動,以及:(:(IE) –

+0

編輯我的答案與小提琴,可能會幫助 –

0

該錯誤是由於在將元素添加到文檔之前使用元素引起的。要解決此問題,需要先將此元素添加到文檔中,然後執行附加操作在這個元素上

var $spans = $('<span><span class="one"><span class="two"></span></span></span>'); 

$(document.body).append($spans); 

$('.one', $spans).css('border', 'solid 1px black').scrollLeft(200); 
$('.one', $spans).css('border', 'solid 1px blue').scrollTop(200); 
+0

這是有目的的問題是,如果有可能沒有附加它。 –