中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript獲取元素尺寸的方法

發布時間:2020-09-08 10:39:50 來源:億速云 閱讀:355 作者:小新 欄目:web開發

小編給大家分享一下JavaScript獲取元素尺寸的方法,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

HTML尺寸

所謂元素的HTML尺寸,就是指在HTML標簽中設置的尺寸樣式。

例如:

<p class="box" style="width: 200px; height: 200px;"></p>復制代碼

頁面效果如下圖所示:

這種尺寸可以通過elem.style.widthelem.style.height獲取

例如:

let box = document.querySelector('.box');console.log(box.style.width); // 200pxconsole.log(box.style.heihgt); // 200px復制代碼

但是對于CSS尺寸,它們是無法獲取的。

例如:

.box {    width: 200px;    height: 200px;    background: lightpink;
}復制代碼

如下圖所示:

為了讓樣式和結構分離,我們會將樣式單獨寫進CSS文件中,如果上述方法無法獲取元素的尺寸,那我們該通過什么方法如何獲取呢?

接著往下看。

JavaScriptelement對象中,提供了三種只讀屬性,可以用于獲取元素的尺寸。

它們分別是:

  • offsetHeightoffsetWidth
  • clientHeightclientWidth
  • scrollHeightscrollWidth

我們先從第一種開始

offsetHeightoffsetWidth

offsetHeight用于獲取元素的真實高度(border-box),它包含該元素的垂直內邊距和邊框,如果有水平滾動條的話(水平滾動條高度為17px,一般會被計入內容高度height中),還需要加上水平滾動條的高度。

offsetWidth用于獲取元素的真實寬度(border-box),它包含該元素的水平內邊距和邊框,如果有垂直滾動條的話(水平滾動條高度為17px,一般會被計入內容寬度width中),還需要加上垂直滾動條的寬度。

沒有滾動條時

一個p元素有如下樣式

.box {    margin: 10px auto;    padding: 10px;    width: 200px;    height: 200px;    border: 1px solid #000;    background: lightpink;
}復制代碼

頁面效果如下:

其盒模型如下所示:

由于offsetHeight獲取的是元素的真實高度,那么其高度為height+ padding * 2 + border * 2,即200px+10px * 2+1px * 2,為222px

offsetWidth獲取的是元素的真實寬度,那么其寬度為width+padding * 2+border * 2,即200px+10px * 2+1px * 2,為222px

let box = document.querySelector('.box');let height = box.offsetHeight;let width = box.offsetWidth;console.log(height); // 222pxconsoel.log(width); // 222px復制代碼

含有滾動條時

當含有滾動條時,由于水平滾動條的高度為17px,一般會被計入內容高度height中,即內容高度的實際值要比設置的值要少17px

兩個p為父子關系,它們有如下樣式:

.father {    margin: 10px auto;    padding: 10px;    width: 200px;    height: 200px;    border: 1px solid;    background: lightsalmon;    /* 滾動條高度和寬度被計算到content中 */
    overflow: auto;
}.son {    width: 220px;    height: 220px;    background: plum;
}復制代碼

頁面效果如下:

其盒模型如下所示:

可以看到,內容區域的寬度實際有效值為183px,是設置的width值減去了垂直滾動條的寬度17px后的值。內容區域的高度亦是如此。

但當有滾動條時,由于offsetHeightoffsetWidth的值除了內邊距和邊框值外,還需要包含滾動條的高度和寬度。雖然滾動條占據了內容區域的widthheight部分空間,但是,最終計算時,又加上了。

所以真實寬度還是相當于原來設置的width+ padding * 2+ border * 2,即200px + 10px * 2+1px * 2,為222px。高度亦然。

let f_box = document.querySelector('.father');let f_height = f_box.offsetHeight;let f_width = f_box.offsetWidth;console.log(f_height); // 220pxconsole.log(f_width); // 220px復制代碼

clientHeightclientWidth

clientHeightclientWidth表示可視區域的高度和寬度,包括元素內容本身的寬度和高度以及padding。但是,如果有滾動條的話,需要減去滾動條的寬度和高度。

沒有滾動條時

一個p有如下樣式:

.box {    margin: 10px auto;    padding: 10px;    width: 200px;    height: 200px;    border: 1px solid #000;    background: lightpink;
}復制代碼

頁面效果如下:

其盒模型如下:

該元素的clientHeightwidth+padding * 2,即200px+10px * 2,為220px,高度亦然。

let box = document.querySelector('.box');let height = box.clientHeight;let width = box.clientWidth;console.log(height); // 220pxconsoel.log(width); // 220px復制代碼

含有滾動條時

當含有滾動條時,需要減去滾動條的寬度和高度。

父子p有如下樣式:

.father {    margin: 10px auto;    padding: 10px;    width: 200px;    height: 200px;    border: 1px solid;    background: lightsalmon;    /* 滾動條高度和寬度被計算到content中 */
    overflow: auto;
}.son {    width: 220px;    height: 220px;    background: plum;
}復制代碼

頁面效果如下:

其盒模型如下:

那么,clientWidth的值為width+padding * 2-17px,即200px+10px * 2-17px,為203px

所謂可視區域,就是我們最終能看到的部分。就像下圖一樣,原來的元素如果沒有滾動條,它的尺寸應該是紅色框線所包裹的尺寸。

但是,由于多了滾動條,可視區域就減小了,如下所示。在原有尺寸基礎上減去滾動條的寬度和高度就是可視區域的寬度和高度了。

scrollHeightscrollWidth

scrollHeight用于獲取一個元素的內容高度,包括溢出的部分。scrollWidth用于獲取一個元素的內容寬度,包括溢出的部分。當然,在沒有溢出,即沒有滾動條的情況下,這兩個值等同于clientHeightclientWidth,也是包括元素本身的尺寸以及padding,但不包括bordermargin

父子p有如下樣式:

.father {    margin: 10px auto;    padding: 10px;    /* 父元素的內容寬度:320px + 10px = 330px */
    width: 200px;    /* 父元素的內容高度:200px - 17px = 203px */
    height: 200px;    border: 1px solid #000;    overflow: auto;
}.son {    padding: 10px;    /* 子元素的真實寬度:300px + 10px * 2 = 320px */
    width: 300px;    height: 100px;    background: plum;
}復制代碼

頁面效果如下:

由于子元素的高度只有100px,沒有發生溢出,因此,父元素的scrollHeight就等同于clientHeightwidth+padding-水平滾動條高度17px,即200px+10px*2-17px=203px

子元素真實占據的寬度有300px+10px*2 = 320px,外加父元素設置的左側內邊距還是10px右側內邊距失效。因此父元素的scrollWidth的值為320px+10px,為330px

let f_box = document.querySelector('.father');let height = f_box.scrollHeight;let width = f_box.scrollWidth;console.log(height); // 203pxconsole.log(width); // 330px復制代碼

父元素設置overflow造成右內邊距失效的問題

關于父元素設置overflow: auto時,造成的右內邊距失效,有以下圖片可以佐證。

如上所示:父元素的左側和頂部都有10px的內邊距,但是右側就沒有。

如上所示:因為子元素沒有設置overflow,所以可以看到子元素的右內邊距依然是生效的。

當子元素的寬度大于父元素的寬度時,子元素的margin-right或者父元素的padding-right是被計算為0的。這里不具體展開。

看完了這篇文章,相信你對JavaScript獲取元素尺寸的方法有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

静乐县| 射阳县| 修水县| 嘉禾县| 汉中市| 贺兰县| 布拖县| 长寿区| 义乌市| 双柏县| 安岳县| 涟水县| 益阳市| 彰化县| 漠河县| 义马市| 九寨沟县| 三都| 富锦市| 东海县| 海伦市| 涡阳县| 昆山市| 洮南市| 兴山县| 宁波市| 左权县| 庆城县| 罗甸县| 英山县| 北宁市| 科技| 洪江市| 乌拉特中旗| 陵水| 泸定县| 巨鹿县| 韶山市| 平泉县| 廉江市| 霸州市|