2012-05-02 27 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

这是有目的的问题是,如果有可能没有附加它。 –