最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS動態(tài)獲取元素寬高的幾種方式

 更新時間:2024年09月18日 11:37:55   作者:亦黑迷失  
這篇文章主要介紹了js 動態(tài)獲取元素寬高的幾種方式,文章通過代碼示例和圖文結(jié)合的方式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下

前期準(zhǔn)備

我先準(zhǔn)備了 2 個用來測試的 div

<div id="box1"></div>
<div id="box2"></div>

樣式如下,紅色的 box1 有使用 css 明確定義的寬高,綠色的 box2 則是只定義了高度,寬度為父元素(頁面)的 50%:

body {
  margin: 0;
}

#box1 {
  width: 100px;
  height: 100px;
  background-color: brown;
}

#box2 {
  width: 50%;
  height: 100px;
  background-color: cadetblue;
}

效果如下:

我通過 id 獲取到了 box1 和 box2 對象:

const box1 = document.getElementById('box1')
const box2 = document.getElementById('box2')

offsetWidth 與 offsetHeight

首先介紹的是 HTMLElement 的只讀屬性 offsetWidth 與 offsetHeight。我們可以直接打印查看 box1 和 box2 的寬高:

window.addEventListener('resize', () => {
  console.log(box1.offsetWidth, box1.offsetHeight)
  console.log(box2.offsetWidth)
})

結(jié)果如下,當(dāng)文檔寬度為 642.5px 時,box1.offsetWidth 和 box1.offsetHeight 均為 100,box2.offsetWidth 的打印輸出為 321:

表明:

  • offsetWidthoffsetHeight 可以動態(tài)獲取元素的寬高;
  • 獲取的結(jié)果是不帶單位的;
  • 獲取的結(jié)果如果為小數(shù),會被取整。

getBoundingClientRect()

getBoundingClientRect() 是一個方法,使用方法如下:

const rect1 = box1.getBoundingClientRect()

返回的結(jié)果是一個 DOMRect 對象,其中除了元素的寬高信息外還有其它屬性:

打印查看 box1 和 box2 的寬度:

window.addEventListener('resize', () => {
  const rect1 = box1.getBoundingClientRect()
  const rect2 = box2.getBoundingClientRect()
  console.log(rect1.width)
  console.log(rect2.width)
})

結(jié)果如下:

表明:

  • getBoundingClientRect() 可以動態(tài)獲取元素的寬度(高度亦然);
  • 獲取的結(jié)果同 offsetWidth 一樣也是不帶單位的;
  • offsetWidth 不同的是,它的結(jié)果不會取整。

getComputedStyle()

getComputedStyle() 也是一個方法,使用方式如下:

const style1 = getComputedStyle(box1)

打印查看 style1,結(jié)果如下:

返回的對象基本上包含了 box1 的所有 css 屬性。我們只需要查看 width 屬性,所以可以:

window.addEventListener('resize', () => {
  const style1 = getComputedStyle(box1)
  const style2 = getComputedStyle(box2)
  console.log(style1.width)
  console.log(style2.width)
})

得到的結(jié)果如下:

表明:

  • getComputedStyle() 也可以動態(tài)地獲取元素的寬度;
  • 獲取的結(jié)果是帶單位的,這點與 getBoundingClientRect()offsetWidth 不同;
  • 它的結(jié)果也不會取整。

邊框、內(nèi)邊距的影響

現(xiàn)在我給 box1 的 css 添加上邊框 (border) 和內(nèi)邊距 (padding),研究對幾種獲取寬高的方式是否會產(chǎn)生影響:

#box1 {
  /* ...忽略之前的定義 */
  border: 1px solid #333;
  padding-left: 10px;
}
  • offsetWidth 與 offsetHeight

現(xiàn)在打印的結(jié)果中,box1.offsetWidth 就會為 112,box1.offsetHeight 為 102:

這說明 offsetWidthoffsetHeight 的值是會包含邊框和內(nèi)邊距的。

  • getBoundingClientRect()

rect1.width 的打印結(jié)果會約等于 box1 的 width(100px) + border(1px*2) + padding(10px) 的 112px:

可見 getBoundingClientRect() 獲取的寬高是會包含邊框和內(nèi)邊距的。

  • getComputedStyle()

即使添加了邊框與內(nèi)邊距,打印 style1.width 得到的結(jié)果依舊為 100px:

可見獲取的僅僅是 css 屬性中的 width 的值,與其它無關(guān)。

盒模型的影響

如果我再將 box1 的盒模型做出修改,改為 border-box

#box1 {
  /* ...忽略之前的定義 */
  box-sizing: border-box;
}

此時,無論是通過 offsetWidth 還是 getBoundingClientRect() 或是 getComputedStyle(),它們獲取到的關(guān)于 box1 寬度的結(jié)果,都為 100(或 100px):

以上就是JS動態(tài)獲取元素寬高的幾種方式的詳細內(nèi)容,更多關(guān)于JS獲取元素寬高的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • javascript中關(guān)于break,continue的特殊用法與介紹

    javascript中關(guān)于break,continue的特殊用法與介紹

    javascript大家所熟知中的for是一個循環(huán)體,循環(huán)體其中的break和continue也是大家都比較熟悉的功能,相信大家對它們的用法不會陌生,本文不是介紹其功能,本文假設(shè)你已經(jīng)熟悉break和continue的語意和用法
    2012-05-05
  • js實現(xiàn)簡單五子棋游戲

    js實現(xiàn)簡單五子棋游戲

    這篇文章主要為大家詳細介紹了js實現(xiàn)簡單五子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • JavaScript和jQuery獲取元素高度的各種方法

    JavaScript和jQuery獲取元素高度的各種方法

    在前端開發(fā)中,獲取元素高度是最基礎(chǔ)也是最常用的操作之一,本文將詳細介紹 原生JavaScript 和 jQuery 中獲取元素高度的各種方法,幫你徹底搞懂它們的區(qū)別,需要的朋友可以參考下
    2026-05-05
  • javaScript使用EL表達式的幾種方式

    javaScript使用EL表達式的幾種方式

    這篇文章主要介紹了javaScript如何使用EL表達式,有哪幾種不錯的方式,需要的朋友可以參考下
    2014-05-05
  • ES6知識點整理之Proxy的應(yīng)用實例詳解

    ES6知識點整理之Proxy的應(yīng)用實例詳解

    這篇文章主要介紹了ES6知識點整理之Proxy的應(yīng)用,結(jié)合實例形式詳細分析了ES6中Proxy的功能、原理、使用方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-04-04
  • 最簡單的JavaScript圖片輪播代碼(兩種方法)

    最簡單的JavaScript圖片輪播代碼(兩種方法)

    基于javascript代碼實現(xiàn)最簡單的圖片輪播效果,非常簡單,本文通過兩種方式給大家介紹最簡單的圖片輪播,感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • mongoose之bulkWrite操作使用實例

    mongoose之bulkWrite操作使用實例

    這篇文章主要為大家介紹了mongoose之bulkWrite操作使用實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • 詳解web如何改變主題配色方法示例

    詳解web如何改變主題配色方法示例

    這篇文章主要為大家介紹了web如何改變主題配色方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • 鼠標(biāo)滾軸控制文本框值的JS代碼

    鼠標(biāo)滾軸控制文本框值的JS代碼

    這篇文章主要介紹了鼠標(biāo)滾軸控制文本框值的JS代碼,有需要的朋友可以參考一下
    2013-11-11
  • JavaScript定時器setTimeout、setInterval使用詳解

    JavaScript定時器setTimeout、setInterval使用詳解

    網(wǎng)站開發(fā)過程中經(jīng)常會用到各種各樣的定時任務(wù),這時我們會用到setTimeout和setInterval方法,下面這篇文章主要給大家介紹了關(guān)于JavaScript定時器setTimeout、setInterval使用的相關(guān)資料,需要的朋友可以參考下
    2023-04-04

最新評論

巴中市| 枝江市| 敦化市| 平顺县| 潞城市| 保康县| 托克逊县| 中超| 涿鹿县| 昭平县| 东乌| 沂南县| 湖南省| 同德县| 漳平市| 璧山县| 新余市| 临海市| 盐边县| 登封市| 双鸭山市| 塔城市| 无极县| 敦化市| 常熟市| 安顺市| 阜阳市| 沁源县| 宁乡县| 昭通市| 内乡县| 上思县| 莎车县| 富阳市| 乌拉特后旗| 四平市| 彰武县| 清新县| 静海县| 巴彦淖尔市| 彭山县|