在javascript dom中 - 一個元素的offsetHeight和clientHeight有什麼不同?offsetHeight和clientHeight之間的區別
回答
返回可見區域的高度爲對象,以像素爲單位。該值包含填充的高度,但不包含scrollBar,邊框和邊距。
返回可見區域的高度爲對象,以像素爲單位。該值包含填充,滾動條和邊框的高度,但不包括邊距。
所以,offsetHeight
包含滾動條和邊框,clientHeight
沒有。
我注意到的另一件事是clientHeight比offsetHeight快得多。你有什麼想法,爲什麼? – disc0dancer 2013-11-06 14:59:59
@ disc0dancer - 可能因爲瀏覽器已經有了'clientSize'(畢竟,它是視口),但需要在重新整理文檔後計算'offsetHeight'? – Oded 2013-11-06 15:02:23
那麼webkit檢查員說,即使在詢問clientHeigh時,整個文檔也會出現迴流。 – disc0dancer 2013-11-06 15:21:11
Oded的答案是理論。但理論和現實並不總是相同的,至少不是對於javascript中的滾動操作可能是重要的元素,至少不是對於元素而言。
微軟在MSDN一個很好的形象:
如果你有一個HTML網頁,其中顯示了一個垂直滾動條人們會認爲無論是<BODY>或<HTML>元素有一個如圖所示,ScrollHeight geler比OffsetHeight更高。所有舊版本的Internet Explorer都是如此。
但它不適用於Internet Explorer 11而不適用於Firefox 36. 至少在這些瀏覽器中,OffsetHeight與ScrollHeight幾乎相同,這是錯誤的。
雖然OffsetHeight可能是錯誤的,但ClientHeight始終是正確的。
嘗試在不同的瀏覽器下面的代碼,你會看到:
<!DOCTYPE html>
<html>
<body>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<script>
document.write("Body off: " + document.body.offsetHeight
+ "<br>Body cli: " + document.body.clientHeight
+ "<br>Html off: " + document.body.parentElement.offsetHeight
+ "<br>Html cli: " + document.body.parentElement.clientHeight);
</script>
</body>
</html>
雖然舊的Internet Explorer中顯示正確:
Body off: 1197
Body cli: 1197
Html off: 878
Html cli: 874
從Firefox和Internet Explorer 11的輸出是:
Body off: 1260
Body cli: 1260
Html off: 1276 // this is completely wrong
Html cli: 889
這裏清楚地顯示了offsetHeight是錯誤的。 OffsetHeight和ClientHeight應該只相差幾個像素或者相同。
請注意,ClientHeight和的offsetHeight也可以不同極其對於那些不喜歡例如<FORM>其中的offsetHeight可能是形式的實際尺寸,同時ClientHeight可以是零可見的元素。
- 1. 什麼是offsetHeight,clientHeight,scrollHeight?
- 2. 之間的〜/和的區別../
- 3. '#','%'和'$'之間的區別
- 4. {!!之間的區別!!}和{{}}
- 5. '+ ='和'= +'之間的區別?
- 6. 「。+」和「。+?」之間的區別
- 7. .eq之間的區別。和==
- 8. #。/和#之間的區別。 ./
- 9. !=和!之間的區別==
- 10. 「%〜dp0」和「。\」之間的區別?
- 11. | =和^ = css之間的區別
- 12. 之間的區別。和#
- 13. ==和case之間的區別?
- 14. 「**/* /」和「** /」之間的區別?
- 15. jQuery - '。'之間的區別和「#」
- 16. 「?1」和「?」之間的區別
- 17. `%in%`和`==`之間的區別
- 18. fmod和%之間的區別
- 19. 之間的區別:+和:+
- 20. 類區域和堆之間的區別
- 21. SPFile和PublishingPage類別之間的區別
- 22. 子類和類別之間的區別?
- 23. System.Timers.Timer Enabled = true和.Start()之間的區別Enabled = true和.Start()之間的區別
- 24. isForeground()和onExposed和onObscured之間的區別
- 25. $ .ajax()和$ .get()和$ .load()之間的區別
- 26. 和intent和setcontentview之間的區別
- 27. Java和C#和.NET之間的區別
- 28. NSthread和NStimer和NSNotifcation之間的區別?
- 29. sys.log()和console.log()和console.error()之間的區別?
- 30. 關注與責任之間的區別(即SRP和SoC之間的區別)?
這裏有一個很好的演示例子http:// jsfiddle。net/shibualexis/yVhgM/3/ – GibboK 2015-01-24 09:57:56