height、clientHeight、scrollHeight、offsetHeight區別


1.top

此屬性僅僅在對象的定位(position)屬性被設置時可用。否則,此屬性設置會被忽略。


復制代碼
代碼如下:

<div style="background-color:red; position:absolute; width:100px; height:100px;">
<p style=" position:absolute; top:-5px;">測試top</p>
</div>


上面是一個段落P包含在一個DIV內,可以看到P的top設置為-5px后,它的上邊距超過了容器DIV的上邊距,超過的這段距離就是設置的5px。

需要注意的是,DIV和P這一對包含元素,都需要設置position為absolute才能得到想要的結果,假如父元素不設置,則子元素的參照將是更上層定義過position的元素,直到整個文檔;

2.posTop

posTop的數值其實和top是一樣的,但區別在於,top固定了元素單位為px,而posTop只是一個數值,一般使用posTop來進行運算。

3.scrollTop


復制代碼
代碼如下:

<div id="container" style=" width:100px; height:100px; overflow:auto;">
<p style="" mce_style="">
這里是文本
</p>
</div>
<script type="text/javascript"><!--
container.scrollTop = 12;
// --></script>


這一段文本在這個100*100的DIV內無法完全顯示,所以設置了overflow為auto,它會出現一個上下方向的滑動框,假如沒有設置 id.scrollTop屬性的話,默認情況下滑塊位置在頂端。而設置了scrollTop值為12后,滑塊的位置改變了,默認顯示是卷過了12個象素的文本。如果設置overflow為hidden,則將會無法顯示頂部12個象素的文本。

注意設置方式是id.scrollTop,而不是id.style.scrollTop。

4.offsetTop

如果元素 A 是 HTML 的 body 元素,其 display 屬性計算值是 none,或者不具有 CSS 布局盒子,則返回 0,並停止本算法。

如果元素 A 的 offsetParent 是 null 或者是 HTML 的 body 元素,以 CSS 像素為單位返回元素 A 上邊框距畫布原點的垂直距離,並停止本算法。

以 CSS 像素為單位返回元素 A 上邊框距其 offsetParent 上邊框的距離。
 
5. scrollHeight 與 offsetHeight與clientHeight

對於document.body

clientHeight
大家對 clientHeight 都沒有什么異議,都認為是內容可視區域的高度,也就是說頁面瀏覽器中可以看到內容的這個區域的高度,一般是最后一個工具條以下到狀態欄以上的這個區域,與頁面內容無關。

offsetHeight
IE、Opera 認為 offsetHeight = clientHeight + 滾動條 + 邊框。
NS、FF 認為 offsetHeight 是網頁內容實際高度,可以小於 clientHeight。

scrollHeight
IE、Opera 認為 scrollHeight 是網頁內容實際高度,可以小於 clientHeight。
NS、FF 認為 scrollHeight 是網頁內容高度,不過最小值是 clientHeight

對某個HTML控件

offsetHeight是自身元素的高度,scrollHeight是 自身元素的高度+隱藏元素的高度。


復制代碼
代碼如下:

<div id="container" style=" width:100px; height:100px; overflow:auto;">
<p style=" height:250px; ">
別再做情人 做只貓 做只狗 不做情人 做只寵物至少可愛迷人 和你相交不淺無謂明日會被你憎</p>
</div>
<script type="text/javascript"><!--
alert(container.offsetHeight);
alert(container.scrollHeight);
// --></script>


將依次輸出100,250。因為已經指定了元素的height為100px,所以offsetHeight始終為100px;內部元素為250px,而容器元素只有100px,那么還有150px的內容它無法顯示出來,但它卻是實際存在的,所以scrollHeight值為100+150=250。  

 

第二篇

 

我們來實現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
IE與火狐下的運行結果是一致的.下面來看下clientHeight的定義.
clientHeight:可見區域的寬度,不包括boder的寬度,如果區域內帶有滾動條,還應該減去橫向滾動條不可用的高度,正常的是17px,其實就是滾動條的可滾動的部分了,其實clientHeight與height的高度差不多,如果不帶滾動條的話他們的值都是一樣的,如果帶有滾動條的話就會比height值少17px;火狐與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下簡直差太多了..
在火狐下還很好理解,它其實就是滾動條可滾動的部分還要加上boder的高度還要加上橫向滾動條不可用的高度,與clientHeight比起來,多個border的高度跟橫向滾動條不可用的高度.

在IE中 scrollHeight確是指這個對象它所包含的對象的高度加上boder的高度和marging,如果它里面沒有包含對象或者這個對象的高度值未設置,那么它的值將為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跟火狐的結果是一樣的,均表示是自身的高度,如果有設置boder的話還應該加上boder的值,因為除了test4這個div外,其他的div均有設置border=1px,所以552=550+2,其他的均一樣.

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

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

jquery

 

在jQuery中,width()方法用於獲得元素寬度;innerWidth()方法用於獲得包括內邊界(padding)的元素寬度,outerWidth()方法用於獲得包括內邊界(padding)和邊框(border)的元素寬度,如果outerWidth()方法的參數為true則外邊界(margin)也會被包括進來,即獲得包括外邊框(margin)、內邊界(padding)和邊框(border)的元素寬度。同理,innerHeight方法與outerHeight方法也是用同樣的方法計算相應的高度。
所以說:對於同一個元素應該是:width()<=innerWidth()<=outerWidth()<=outerWidth(true);

再給你一個實例,前提是正確導入jQuery,即可運行。
代碼中將p元素的寬度設計為200px;運行會輸出200、220、240、260。
<script type="text/javascript">
$(document).ready(function(){
  $(".btn1").click(function(){
    var obj=$("#p_obj");
    alert(obj.width());
    alert(obj.innerWidth());
    alert(obj.outerWidth());
    alert(obj.outerWidth(true));
  });
});
</script>
<p id="p_obj" style=" width:200px; padding:10px; border:10px solid blue; margin:10px;">This is a paragraph.</p>
<button class="btn1">輸出高度</button>

 



 


免責聲明!

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



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