2010-01-28 86 views
1

Mozilla & IE開發人員似乎已經同時更改了其高度元素的實現來表示Opera實現......我以前不必擔心。javascript文檔高度併發症

var height = (document.height !== undefined) ? document.height : document.body.offsetHeight; 

當在空白文檔上執行時,現在返回0作爲文檔的高度。我的實現需要知道真正的客戶端視口動態構建。 Chrome和Safari仍然像以往一樣行事。

scrollHeight和clientHeight的作用完全相同。

使事情變得複雜document.height和document.body.offsetHeight現在也將文檔的整個高度考慮在內,而不僅僅是可視區域,因爲他們曾經用過......我嘗試了一種舊的表格間隔方法並使用一個2000像素x 1px的透明和文檔高度現在設置爲2000 ....自然Chrome和Safari仍然按預期工作,只給出可視尺寸。

我非常想解決這個問題。

回答

5

視口的高度是不是該文檔的屬性,但該窗口中查看它的。您從window.innerHeight獲得視口高度。

document的東西僅作爲IE的備用,它不提供window.inner尺寸。 IE(技術上不正確)使document.documentElement代表視口,所以你可以從它的clientHeight得到高度,除非你在怪癖模式下(更不正確)使得document.body代表視口。 (document.height完全是非標準,避免它。)

因此,在總結,並假設你需要支持Quirks模式(讓我們希望你不要):

var height= (
    'innerHeight' in window? window.innerHeight : 
    document.compatMode!=='BackCompat'? document.documentElement.clientHeight : 
    document.body.clientHeight 
); 
+0

絕對精彩,非常非常非常感謝! – David 2010-01-28 21:10:19

+0

bobince值得一票。 – 2010-01-28 21:21:59

1

我用這個,我從James Paldosey's site有:

function getDocHeight() { 
    //utility function to find dimensions of page 
    var D = document; 
    return Math.max(
     Math.max(D.body.scrollHeight, D.documentElement.scrollHeight), 
     Math.max(D.body.offsetHeight, D.documentElement.offsetHeight), 
     Math.max(D.body.clientHeight, D.documentElement.clientHeight) 
    ); 
} 
+0

不再爲空白證件,所有這些返回當前從0開始的文檔長度。我需要空白文檔上的可視區域。 – David 2010-01-28 20:50:09

+0

其實這是jQuery如何做的(http://code.jquery.com/jquery-1.10.2.js): 「滾動[寬度/高度]或偏移[寬度/高度]或客戶端[寬度/ Height],以最大者爲準。不幸的是,這隻會導致在IE6/8中出現bug#3838,但目前還沒有一個好的解決方法。 – AnAurelian 2013-09-24 12:14:09