JavaScript offsetWidth

admin發表於2019-01-08

offsetWidth屬性可以返回元素的偏移寬度,只讀屬性,不能賦值。

無需糾結為什麼稱作偏移寬度,當然是有原因的,可能越討論越混亂。

我們只需要知道此寬度由哪些要素構成即可,可以結合offsetHeight屬性一起學習。

既然是偏移寬度,肯定與CSS中的width寬度有區別,不要想當然將它們等同。

語法結構:

[JavaScript] 純文字檢視 複製程式碼
let num = dom.offsetWidth

圖示如下:

a:3:{s:3:\"pic\";s:43:\"portal/201901/09/092858dmmwze8s3mhksyi5.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

紅線之間的尺寸,就是offsetWidth屬性的返回值,下面分析一下返回值的具體構成:

(1).包含元素的寬度,這個寬度是CSS的width屬性指定的值。

(2).包含左右內邊距的尺寸。

(3).不包含左右外邊距的尺寸。

(4).包括左側垂直滾動條的寬度。

上面的這四條總結會在後面通過程式碼例項進行驗證。

offsetWidth屬性還有兩點需要再強調一下:

(1).返回值是數值,不帶任何單位,但是預設單位是畫素。

(2).與CSS的width不同,雖然可能在數值在相等。

(3).offsetWidth返回值會對數值進行四捨五入取整,加入實際的值是260.5,那麼返回161。

如果想要獲取獲取精確的值,推薦使用getBoundingClientRect()方法。

瀏覽器相容:

(1).IE瀏覽器支援此屬性。

(2).edge瀏覽器支援此屬性。

(3).谷歌瀏覽器支援此屬性。

(4).opera瀏覽器支援此屬性。

(5).火狐瀏覽器支援此屬性。

(6).safria瀏覽器支援此屬性。

程式碼例項:

[HTML] 純文字檢視 複製程式碼執行程式碼
<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>螞蟻部落</title>
<style type="text/css">
#box{
  width:200px;
  height:100px;
  line-height:100px;
  border:10px solid blue;
  padding-left:10px;
  padding-right:5px;
  background:#ccc;
  text-align:center;
}
</style>
<script>
window.onload=function(){
  let odiv=document.getElementById("box");
  odiv.innerHTML=odiv.offsetWidth;
}
</script>
</head>
<body>
<div id="box"></div>
</body>
</html>

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201901/08/235104n3nvmq3hqoujxznv.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

上述程式碼可以獲取div元素的offsetWidth屬性值,並將其寫入div。

上述程式碼簡單分析如下:

(1).屬性值是數值型別,無單位。

(2).235 = width + border-left + border-right + padding-left + padding-right。

[HTML] 純文字檢視 複製程式碼執行程式碼
<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>螞蟻部落</title>
<style type="text/css">
#box{
  width:200px;
  height:100px;
  line-height:100px;
  background:#ccc;
  text-align:center;
}
</style>
<script>
window.onload=function(){
  let odiv=document.getElementById("box");
  odiv.innerHTML=odiv.offsetWidth;
}
</script>
</head>
<body>
<div id="box"></div>
</body>
</html>

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201901/08/235146r0wz0huwmbi07bm9.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

特殊情況下,offsetWidth值大小與元素width值的大小可能會相同(只考慮數值大小)。

那就是元素沒有左右內邊距,沒有邊框,沒有垂直滾條的情況下。

[HTML] 純文字檢視 複製程式碼執行程式碼
<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>螞蟻部落</title>
<style type="text/css">
#box{
  width:200px;
  height:100px;
  line-height:100px;
  background:red;
  text-align:center;
  font-size:12px;
  border:10px solid blue;
  padding-left:10px;
  overflow:auto;
}
#ant{
  width:100px;
  height:200px;
  background:green;
}
</style>
<script>
window.onload=function(){
  let odiv=document.getElementById("box");
  console.log(odiv.offsetWidth);
}
</script>
</head>
<body>
<div id="box">
  <div id="ant"></div>
</div>
</body>
</html>

offsetWidth屬性值谷歌開發者工具控制檯截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201901/08/235209jzofozdmmf8d8mnc.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

程式碼分析如下:

(1).內部div高度較大,所以父div元素會出現滾動條。

(2).滾動條自然有一定的寬度(或者說厚度),當前在谷歌瀏覽器下寬度值為17px,其他瀏覽器可能不同。

(3).offsetWidth包括滾動條的寬度,滾動條是向內佔據寬度,也就是滾動條不額外增加offsetWidth值。

相關文章