2014-01-22 46 views
2

我将div1追加到div2中,然后获取div2的高度()。如果我在调用height()之前等待50ms,我会得到不同的高度。好像我在浏览器完成渲染div1之前获得高度。任何人都有一个想法,我可以如何解决这个问题。我添加了很多元素,并且需要在每个元素之后检查高度,因此每个元素之间的延迟看起来可能会加起来很大的延迟。Element.height()不正确,因为浏览器还没有完成渲染?

$(div2).append(div1); 
console.log(div2.height()) // 295 

where as... 

$(div2).append(div1); 
window.setTimeout(function(){ 
    console.log(div2.height()) // 245 
},50) 
+0

http://stackoverflow.com/questions/19737762/how-to-determine-when-a-browser-has-的可能的复制完成绘画插入元素 –

+0

我有一个游戏相同的问题,你需要延迟加载/ documentready。 – ZiTAL

+0

您需要等待元素完成加载,或者您需要找出事先未确定其高度的原因。在字体渲染(如Typekit或Google字体)的情况下,可以做的不多,只能等待。对于您的内容,您可以将高度值设置为和其他元素,以便浏览器在绘制dom之前知道它们的尺寸。 –

回答

1

您可以要求强制布局的某些属性。例如,如果您请求这些属性:

  • 的offsetTop
  • offsetLeft
  • offsetWidth
  • 的offsetHeight
  • scrollTop的/左/宽/高
  • clientTop /左/宽/高

浏览器将在返回值之前布局该元素。如果您的布局复杂,则可能需要在多个对象上请求属性才能正确布置多个项目。

请参阅this answerthis article了解更多详情和工作演示的概念。

0

把你的代码中

$(document).ready(function() { 
// your code 
}); 

,将工作