height、clientHeight、scrollHeight、offsetHeight區(qū)別

我們來實現test中的onclick事件

function justAtest()
{
      var test= document.getElementById("test");
      var test2=document.getElementById("test2")
      var test3=document.getElementById("test3")
      var test4=document.getElementById("test4");     
      alert(test4.style.height);
      alert(test3.style.height);    
      alert(test2.style.height)
      alert(test.style.height);      
      alert(document.body.style.height)
}

height:其實Height高度跟其他的高度有點不一樣,在javascript中它是屬于對象的style對象屬性中的一個成員,它的值是一個字符類型的,而另外三個高度的值是int類型的,它們是對象的屬性.
因此這樣document.body.height就會提示undenifine,而必須寫成document.body.style.height
上面的腳本將依次彈出700px,550px,600px,500px,1000px。
height是最簡單的了,不必去考慮是否有滾動條及邊框等.因此也不做多解釋了.

然后我們將腳本換下

function justAtest()
{
        var test= document.getElementById("test");
        var test2=document.getElementById("test2")
        var test3=document.getElementById("test3")
        var test4=document.getElementById("test4");     
        alert(test4.clientHeight);
        alert(test3.clientHeight);    
        alert(test2.clientHeight)
        alert(test.clientHeight);      
        alert(document.body.clientHeight)
}

火狐的結果為:700,550,583,483,1000
IE的結果為:700 ,550,583,483,1000

clientHeight:可見區(qū)域的寬度,不包括border的寬度,如果區(qū)域內帶有滾動條,還應該減去橫向滾動條不可用的高度,正常的是17px,其實就是滾動條的可滾動的部分了,其實clientHeight與height的高度差不多,如果不帶滾動條的話他們的值都是一樣的,如果帶有滾動條的話就會比height值少17px;火狐與IE下均為一致.

IE與火狐下的運行結果是一致的.

接著我們來看scrollHeight

 function justAtest()
{
        var test= document.getElementById("test");
        var test2=document.getElementById("test2")
        var test3=document.getElementById("test3")
        var test4=document.getElementById("test4");     
        alert(test4.scrollHeight);
        alert(test3.scrollHeight);    
        alert(test2.scrollHeight)
        alert(test.scrollHeight);      
        alert(document.body.scrollHeight)
}

火狐的結果為:700,552,700,602,1002
IE的結果為: 15, 15 , 700,602, 552

scrollHeight:這個屬性就比較麻煩了,因為它們在火狐跟IE下簡直差太多了..
在火狐下還很好理解,它其實就是滾動條可滾動的部分還要加上border的高度還要加上橫向滾動條不可用的高度,與clientHeight比起來,多個border的高度跟橫向滾動條不可用的高度.

在IE中 scrollHeight確是指這個對象它所包含的對象的高度加上border的高度和margin,如果它里面沒有包含對象或者這個對象的高度值未設置,那么它的值將為15

最后我們來看offsetHeight

 function justAtest()
    {
        var test= document.getElementById("test");
        var test2=document.getElementById("test2")
        var test3=document.getElementById("test3")
        var test4=document.getElementById("test4");     
        alert(test4.offsetHeight);
        alert(test3.offsetHeight);    
        alert(test2.offsetHeight)
        alert(test.offsetHeight);      
        alert(document.body.offsetHeight)
     }

offsetHeight:
FF:700,552,602,502,1002
IE:700,552,602,502,1002
這個屬性好辦,因為在測試中IE跟火狐的結果是一樣的,均表示是自身的高度,如果有設置border的話還應該加上border的值,因為除了test4這個div外,其他的div均有設置border=1px,所以552=550+2,其他的均一樣.

嘿嘿,綜上所述,clientHeight與height的區(qū)別是如果有滾動條時應減去滾動條的17px不可用部分,offsetHeight與Height的區(qū)別是增加了border的高度,ScrollHeihgt與Height的區(qū)別是火狐下與offsetHeight一致,IE下如上所述.

相信你了解了這個,對width,clientWidth,scrollWidth,offsetWidth已經不陌生了吧,只不過一個是長一個是寬的問題了.

<br />

補充:

scrollHeight:獲取對象的滾動高度。

scrollLeft:設置或獲取位于對象左邊界和窗口中目前可見內容的最左端之間的距離

scrollTop:設置或獲取位于對象最頂端和窗口中可見內容的最頂端之間的距離

scrollWidth:獲取對象的滾動寬度

offsetHeight:獲取對象相對于版面或由父坐標 offsetParent 屬性指定的父坐標的高度

offsetLeft:獲取對象相對于版面或由 offsetParent 屬性指定的父坐標的計算左側位置

offsetTop:獲取對象相對于版面或由 offsetTop 屬性指定的父坐標的計算頂端位置

event.clientX 相對文檔的水平座標

event.clientY 相對文檔的垂直座標

event.offsetX 相對容器的水平坐標

event.offsetY 相對容器的垂直坐標

document.documentElement.scrollTop 垂直方向滾動的值

event.clientX+document.documentElement.scrollTop 相對文檔的水平座標+垂直方向滾動的量

以上主要指IE之中,FireFox差異如下:

IE6.0、FF1.06+:
clientWidth = width + padding
clientHeight = height + padding
offsetWidth = width + padding + border
offsetHeight = height + padding + border

IE5.0/5.5:
clientWidth = width - border
clientHeight = height - border
offsetWidth = width
offsetHeight = height

假設 obj 為某個 HTML 控件。

obj.offsetTop 指 obj 距離上方或上層控件的位置,整型,單位像素。
obj.offsetLeft 指 obj 距離左方或上層控件的位置,整型,單位像素。
obj.offsetWidth 指 obj 控件自身的寬度,整型,單位像素。
obj.offsetHeight 指 obj 控件自身的高度,整型,單位像素。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容