亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

關于元素的尺寸(dimensions) 說明

 更新時間:2011年09月13日 22:42:53   作者:  
在使用JavaScript腳本獲取元素的尺寸時,有幾個屬性你需要弄清楚,不然會很棘手。
在以往我都是對這些屬性死記硬背,很少真正理解過,忘記了就查手冊??赐瓯疚奈蚁嘈胚@種情況就不會再發(fā)生了。

元素占據的物理空間的尺寸
如果你需要獲得元素占據的物理空間,那么使用offsetHeight和offsetWidth。
自然而然此物理空間必然包含的有:padding、滾動條、border。這兩個屬性與getBoundingClientRect()的height和width屬性是一致的。
為了幫助理解請看下圖:
offsetHeight/offsetWidth 
元素內容的可視區(qū)域的尺寸
可視區(qū)域包含padding,但是不包含border、滾動條。此時請使用clientHeight和clientWidth。
為了幫助理解請看下圖:
offsetHeight/offsetWidth 
元素全部內容的尺寸
如果你要獲取元素內容的真正大小,當然也包含那些不可見的內容,此時你需要使用scrollHeight/scrollWidth。
例如一張600*400的圖片被包含在一個300*300的可滾動的容器元素內,那么scrollWidth將返回600,而scrollHeight將返回400
實測:
當元素存在滾動條時,chrome瀏覽器獲取元素的scrollHeight有時候不準確!但是本文的例子是正確的,不知道怎么重現。
獲取元素的真實尺寸
大部分場景,我們并不關心元素的全部內容的尺寸(window/document/body元素除外),最常用的恐怕還是獲取元素占據的物理空間(offsetHeight/offsetWidth)。
比如對某段文字設置自定義的tooltip,這個時候需要獲取目標元素的高度然后對tooltip進行定位。
不論是clientHeight還是offsetHeight它們都包含了padding,假設這段文字包含了100px的padding,這個tooltip的位置顯然會極其的不準確。
因此獲取元素的高度通常是需要去掉padding。
由于元素的style屬性只能獲取到內聯樣式的width/height,所以在IE中需要使用el.currentStyle.height/width,
而標準瀏覽器中使用window.getComputedStyle(el,null).width/height。
下面是我整理的園友Snandy的一個用戶獲取元素真實高度和寬度的方法 :
復制代碼 代碼如下:

function getStyle(el) {
if(window.getComputedStyle) {
return window.getComputedStyle(el, null);
}else{
return el.currentStyle;
}
}
function getWH(el, name) {
var val = name === "width" ? el.offsetWidth : el.offsetHeight,
which = name === "width" ? ['Left', 'Right'] : ['Top', 'Bottom'];
// display is none
if(val === 0) {
return 0;
}
var style = getStyle(el);
for(var i = 0, a; a = which[i++];) {
val -= parseFloat( style["border" + a + "Width"]) || 0;
val -= parseFloat( style["padding" + a ] ) || 0;
}
return val;

}

使用腳本庫往往能幫助我們解決一些棘手的問題,下面來看看jQuery的相關方法
jQuery.height()/jQuery.width()
返回一個整數,為匹配的jQuery對象集合中第一個元素的高度值。
注意此結果不關心盒式模型,不包含元素的padding。此方法等價于getWH(el,'height/width')
這個方法同樣能計算出window和document的高度。
jQuery.innerHeight()/jQuery.innerWidth()
對比jQuery.height() /jQuery.width() 此結果包含padding,但是不包含border。
當元素el未設置border時,此方法等價于el.offsetHeight/offsetWidth
jQuery.outerHeight()/jQuery.outerWidth()
對比jQuery.height() /jQuery.width() 此結果包含padding和border,默認不包含margin。
當元素未指定margin時,此方法等價于el.offsetHeight/offsetWidth
可以傳入一個bool變量來指定是否包含margin。
注意:
由于獲取普通元素的全部內容的尺寸意義不大(某些元素除外如window、document、iframe等),
所以jQuery的這三個方法都未包含不可見區(qū)域。
小測試
下面是一個div設置了高度200px,padding為3px,border為1px,里面的圖片為958*512

上面的值你都猜對了嗎?

更新
又檢查了下測試代碼,scrollHeight在chrome下不準確的原因是使用了jQuery.ready(),而剛好測試的元素內部包含一張圖片。
用過jQuery.ready()的都知道,此時DOM樹已經加載完成,但是圖片元素還沒有完全加載, 因而chrome的處理方式是對的。
于是我就上例又測試了一遍:
在IE 6 / 8返回結果為522/519
chrome返回結果為189
Firefox有一點特殊,不斷刷新頁面會有兩種結果出現:1)522;2)189,但是大部分情況是522
出現這種情況肯定與jQuery 1.6.2的ready函數的實現有關系。
不過就上述結果來看,是否可以推斷jQuery.ready()在chrome中是最安全最快的。

[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]

參考資料

各情景下元素寬高的獲取 by Snandy
Determining the dimensions of elements
Measuring Element Dimension and Location with CSSOM in Internet Explorer 9

相關文章

  • JS實現多物體運動的方法詳解

    JS實現多物體運動的方法詳解

    這篇文章主要介紹了JS實現多物體運動的方法,結合實例形式較為詳細的分析了javascript實現多物體運動的原理與相關操作技巧,需要的朋友可以參考下
    2018-01-01
  • 理解javascript中的嚴格模式

    理解javascript中的嚴格模式

    這篇文章主要幫助大家理解javascript中的嚴格模式,何為嚴格模式,如何啟用嚴格模式,感興趣的小伙伴們可以參考一下
    2016-02-02
  • javascript appendChild,innerHTML,join性能比較代碼

    javascript appendChild,innerHTML,join性能比較代碼

    在實際應用中,應該避免直接用innerHTML,對于大量的字符連接運算,應該考慮先運算再輸出。
    2009-08-08
  • 點擊單元格后可編輯單元格內文本如何制作

    點擊單元格后可編輯單元格內文本如何制作

    點擊單元格后可編輯單元格內文本如何制作...
    2006-10-10
  • bootstrap實現每隔5秒自動輪播效果

    bootstrap實現每隔5秒自動輪播效果

    這篇文章主要介紹了bootstrap實現每隔5秒自動輪播效果,可以自己設置輪播間隔時間,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • JavaScript實現新年倒計時效果

    JavaScript實現新年倒計時效果

    這篇文章主要為大家詳細介紹了JavaScript實現新年倒計時效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • IE和Firefox在JavaScript應用中的兼容性探討

    IE和Firefox在JavaScript應用中的兼容性探討

    今天在使用CSS屬性的時候發(fā)現"cursor:hand;"在Firefox中鼠標不會變?yōu)槭中?,后來上網搜索了一下資料,發(fā)現hand這個cursor屬性在Firrefox中不兼容,使用"cursor:pointer"就都可以顯示了。
    2008-04-04
  • 純Javascript實現ping功能的方法

    純Javascript實現ping功能的方法

    這篇文章主要介紹了純Javascript實現ping功能的方法,實例分析了javascript實現ping功能的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • js實現的八點拖動修改div大小的代碼

    js實現的八點拖動修改div大小的代碼

    八點改變div大小的實現代碼,代碼相對來說并不多,需要的朋友可以參考下。
    2010-02-02
  • JavaScript設計模式之命令模式

    JavaScript設計模式之命令模式

    這篇文章主要介紹了JavaScript設計模式之命令模式,命令設計模式是由發(fā)令者、執(zhí)行者、命令對象三部分構成,文章由此展開詳細的內容介紹,需要的小伙伴可以參考一下
    2022-06-06

最新評論