2013-03-08 103 views
0

我有一個使用某些元素偏移量的腳本。我打算解僱這個腳本:問題頁面渲染上的運行腳本vs頁面加載,在webkit中

window.addEventListener('load', function() { 
    ... 
} 

當我用這個方法,所有的DOM元素的定義,但偏移值是錯誤的。我可以通過關閉一些css值來獲得所提供的偏移量。快速/焦頭爛額,我申請:

window.addEventListener('load', function() { 
    function my_func(){ 
     ... 
    } 
    window.setTimeout(my_func, 1000); 
}); 

這使得正確的偏移,但我只是覺得它的膠帶。

我的最後一次嘗試是迫使WebKit的渲染,但是這也有錯偏移:

window.addEventListener('load', function() { 
    function my_func(){ 
     ... 
    } 
    document.getElementById('wrap').style.display = 'none'; 
    document.getElementById('wrap').style.display = 'block'; 
    my_func(); 
}); 

任何建議嗎?或者爲什麼發生這種情況的解釋。我正在測試的瀏覽器是Chrome。

編輯:

偏移量是一個DOM結構的:

<div id="wrap"> 
    <div> 
     <p>...</p> 
     <p>...</p> 
     <p>...</p> 
    </div> 
    <div> 
     <p>...</p> 
    </div> 
    ... 
</div> 

我由(用於)截枝以上的 「#wrap格」 的節點列表中訪問該偏移。 如果我關閉行高和字體大小,我將得到佈局完全呈現之前計算的偏移量。

在使用offsetHeight之前調整每個p和div的行高,字體大小和顯示不會產生任何影響。

+2

...哪個...補償...?你怎麼看他們?你在哪裏讀過它們? – jAndy 2013-03-08 23:48:02

+1

你是否在使用網頁字體?他們在'onload'火災之前加載嗎? – Halcyon 2013-03-09 00:00:29

回答

1

你應該在網頁上使用load而不是ready渲染因爲你當你的CSS和圖像已完成加載不知道。

如果您的補償在load中不正確,那麼還有其他事情正在進行。

+0

我覺得有趣的是,超時執行可以糾正偏移量。 – Chris 2013-03-09 00:00:06

+1

您是否正在動態加載其他資源? (更多的CSS?)或者它可能是webfonts。 – Halcyon 2013-03-09 00:01:22

+0

是的,就是這樣。我在css中使用@import作爲字體。我是否應該用javaScript提出這個請求,以便我可以在statchange上啓動它 – Chris 2013-03-09 00:04:24