兼容性,特別是這幾個東西的兼容性是很復雜的,為了簡單,建議閱讀再談 document.documentElement 與 document.body 的 scrollWidth、offsetWidth、clientWidth 這篇文章。
我們這里說說四種瀏覽器對 document.body 的 clientHeight、offsetHeight 和 scrollHeight 的解釋,這里說的是 document.body,如果是 HTML 控件,則又有不同。
這四種瀏覽器分別為IE(Internet Explorer)、NS(Netscape)、Opera、FF(FireFox)。
文尾的重要說明比較重要,請注意。
看了評論,不少朋友,對我的描述還是很疑惑,所以我做了下面這個圖,來幫助理解。
從圖中,我們可以看到一個瀏覽器窗口,窗口被我故意拖小了,這樣形成了滾動條,所以網頁上端的內容就隱藏在了窗口上面,網頁下端的內容就隱藏在了窗口下面。
clientHeight、offsetHeight 和 scrollHeight 大致可以這樣解釋(詳細內容請仔細閱讀后面的內容):
- clientHeight 圖中那塊白的的高度。
- offsetHeight、scrollHeight 圖中白的+上陰影部分+下陰影部分,也就是網頁內容高度。
- 順便提一下,那個上陰影部分(最上面一塊漸變黑色),就是 scrollTop。
clientHeight
大家對 clientHeight 都沒有什么異議,都認為是內容可視區域的高度,也就是說頁面瀏覽器中可以看到內容的這個區域的高度,一般是最后一個工具條以下到狀態欄以上的這個區域,與頁面內容無關。
offsetHeight
- IE、Opera 認為 offsetHeight = clientHeight + 滾動條 + 邊框。
- NS、FF 認為 offsetHeight 是網頁內容實際高度,可以小於 clientHeight。也就是說網頁內容實際高度小於 clientHeight 時,offsetHeight 返回網頁內容實際高度。
scrollHeight
- IE、Opera 認為 scrollHeight 是網頁內容實際高度,可以小於 clientHeight。
- NS、FF 認為 scrollHeight 是網頁內容高度,不過最小值是 clientHeight。也就是說網頁內容實際高度小於 clientHeight 時,scrollHeight 返回 clientHeight 。
簡單地說
clientHeight 就是透過瀏覽器看內容的這個區域高度。
NS、FF 認為 offsetHeight 和 scrollHeight 都是網頁內容高度,只不過當網頁內容高度小於等於 clientHeight 時,scrollHeight 的值是 clientHeight,而 offsetHeight 可以小於 clientHeight。
IE、Opera 認為 offsetHeight 是可視區域 clientHeight 滾動條加邊框。scrollHeight 則是網頁內容實際高度。
同理
clientWidth、offsetWidth 和 scrollWidth 的解釋與上面相同,只是把高度換成寬度即可。
重要說明
以上是在沒有指定 DOCTYPE 的情況下,如果指定了 DOCTYPE 為 XHTML,比如:DTD XHTML 1.0 Transitional,則意義又會不同,在這種情況下這三個值都是同一個值,都表示內容的實際高度(並不在乎窗口有多高)。
再說明一下,寫這篇文章時,Chrome 瀏覽器還沒有出來,后來我測試了一下 Chrome 在 指定了 DOCTYPE 為 XHTML 時的情況,真 BT,它的 clientHeight 和 offsetHeight 值相同,都表示內容的實際高度(並不在乎窗口有多高),scrollHeight 又是另外一套不知道什么玩意兒,總之這點它和 IE、Firefox 不同就是了。
好,回過來,如果要在指定的 DOCTYPE 為 XHTML 的情況下,要按文章開頭的解釋(即 clientHeight、offsetHeight、scrollHeight 意義不同)來應用,怎么辦呢?答案是:將 document.body 和 document.documentElement 一起應用,比如:document.documentElement.scrollLeft || document.body.scrollLeft(一般將 document.documentElement 寫在前面),類似應用請參見:http://www.cnblogs.com/wang726zq/archive/2012/05/10/2494256.html。