四種瀏覽器對 document.body 的 clientHeight、offsetHeight 和 scrollHeight 的解釋


兼容性,特別是這幾個東西的兼容性是很復雜的,為了簡單,建議閱讀再談 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 大致可以這樣解釋(詳細內容請仔細閱讀后面的內容):

  • 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM