2015-04-08 42 views
1

我使用$(document).height()來設置塊上的height CSS屬性。這是Safari 5.1.10(OSX 10.6.8)的解決方法,因爲vh單元(視口高度)不適用於此版本。

(function() { 
    if(!Modernizr.cssvhunit) $("#sidebar").css("height", $(document).height()+"px"); 
})(); 

的問題是,由$(document).height()返回的值是不一樣的,每次我刷新頁面。有時它是高度,有時文件高度,有時兩者之間的值...

我用:Modernizr的2.8.3檢測vh單位的支持,jQuery的1.11.0燈箱2.7.1(問題仍然存在沒有它)和骨架2.0.4

我也嘗試過這種方法,但它沒有工作:

function getDocHeight() { 
    var D = document; 
    return Math.max(
     D.body.scrollHeight, D.documentElement.scrollHeight, 
     D.body.offsetHeight, D.documentElement.offsetHeight, 
     D.body.clientHeight, D.documentElement.clientHeight 
    ); 
} 

我不知道什麼會導致這個所謂的常數值是可變......

+2

這聽起來像你可能會獲得高度,而頁面中的圖像仍在加載,因此頁面仍在擴大。嘗試在'$(window).load(fn)'事件下獲取高度,因爲所有圖像都應該在該點加載。 –

+0

這樣做了,謝謝! – ryancey

+0

很高興幫助 - 我將它添加爲您的答案。 –

回答

1

這聽起來像你可能會獲得高度,而頁面中的圖像仍在加載,因此頁面仍在擴大。

在這種情況下,請嘗試獲取$(window).load(fn)事件下的高度,因爲所有圖像都應在該點加載。

0

有時,它幫助測量身高經過一段時間,寬度爲

setTimeout(function() { 
    // get w, h 
},1); 

說明:JS-in-the-browser是一個基於evend的前端系統。以下步驟重複:

  1. 接收用戶/暫停/ AJAX事件
  2. 運行JavaScript監聽器(如果有的話)
  3. 重新呈現DOM改變

頁面渲染髮生在#3,但是您的JS代碼在爲顯示元素確定的最終/適當大小之前在#2,中運行。當#3已經完成時,在#2中設置非常短的超時將重新運行3步循環。

這就是爲什麼沒有效果,當你隱藏一個元素,然後顯示它,並重復它甚至100次:在#2期間沒有渲染是懸掛的,如果你讓它顯示,#3不會發生變化,沒有任何反應。

那麼,它不是太優雅,需要額外的努力來編寫一個UI程序,它不能在需要時獲取尺寸。

+0

它使用超時,但將CSS修改綁定到'$(window).load()'事件更加精確。 – ryancey

+0

Fyeah,圖片加載!你可以在HTML/CSS中指定你的'img'大小......如果你知道的話。 – ern0

相關問題