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

JavaScript中DOM上的尺寸及位置屬性

 更新時(shí)間:2025年08月07日 10:43:18   作者:超級(jí)英雄不打小怪獸  
DOM是JavaScript中的一個(gè)重要概念,它是一種編程接口,使得開發(fā)人員可以使用HTML和XML文檔,這篇文章主要介紹了JavaScript中DOM上尺寸及位置屬性的相關(guān)資料,需要的朋友可以參考下

前言

相信當(dāng)家對(duì)DOM元素上的尺寸及位置屬性一定不陌生,常見的clientHeight、offsetHeight等屬性在日常開發(fā)中會(huì)經(jīng)常用到,但也會(huì)常常忘記各個(gè)屬性具體的邊界情況。本文整理了DOM元素上的尺寸及位置屬性,方便大家日后在使用過程中能快速回想起各個(gè)屬性的邊界。

DOM元素上的尺寸及位置

DOM元素上的尺寸及位置屬性我分為以下三類方便記憶,分別是clinet類、offset類、scroll類。

1、clientHeight、clientWidth、clientTop、clientLeft;

2、offsetHeight、offsetWidth、offsetTop、offsetLeft;

3、scrollHeight、scrollWidth、scrollTop、scrollLeft;

client(可視區(qū))類型

clientHeight:指向元素可視部分的padding-top+padding-bottom+height部分。

clientWidth:指向元素可視部分的padding-left+padding-right+width部分。

clientTop:指向元素的border-top的寬度。

clientLeft:指向元素的border-left的寬度。

注意,這里的可視部分指的是該元素未被折疊起來的部分,而不是指我們所看到的部分,這里從字面上看很容易造成誤導(dǎo)。讓我們來看一個(gè)實(shí)例代碼。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>尺寸及位置</title>
    <style>
        #container{
            background-color: red;
            height: 400px;
            width: 400px;
            padding: 20px;
            border-top: 10px solid;
            border-bottom: 12px solid;
            border-left: 13px solid;
            border-right: 14px solid;
            overflow: auto;
        }
    </style>
</head>
<body>
    <div id="container">
    </div>
    <script>
        const container = document.getElementById('container')
        console.log('clientHeight:',container.clientHeight) //clientHeight: 440
        console.log('clientWidth:',container.clientWidth) //clientWidth: 440
        console.log('clientTop:',container.clientTop)//clientTop: 10
        console.log('clientLeft:',container.clientLeft)//clientLeft: 13
    </script>
</body>
</html>

根據(jù)代碼我們可以很清楚的得到該元素的位置和尺寸值,現(xiàn)在我們將元素的高度改為2000px,使整個(gè)瀏覽器出現(xiàn)縱向滾動(dòng)條。

這個(gè)時(shí)候我們獲取該元素clientHeight應(yīng)該等于 2000+20+20=2400 ,而不是照片中字面意思上的可視區(qū)域高度。我們?cè)倏匆粋€(gè)案例,當(dāng)這個(gè)元素出現(xiàn)滾動(dòng)條時(shí),他的clinetHeight又是多少?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>尺寸及位置</title>
    <style>
        #container{
            background-color: red;
            height: 400px;
            width: 400px;
            padding: 20px;
            border-top: 10px solid;
            border-bottom: 12px solid;
            border-left: 13px solid;
            border-right: 14px solid;
            overflow: auto;

        }
    </style>
</head>
<body>
    <div id="container">
        <div style="height: 1000px;"></div>
    </div>
    <script>
        const container = document.getElementById('container')
        console.log('clientHeight:',container.clientHeight) //clientHeight: 440
        console.log('clientWidth:',container.clientWidth) //clientWidth: 430  由于滾動(dòng)條存在寬度
        console.log('clientTop:',container.clientTop)//clientTop: 10
        console.log('clientLeft:',container.clientLeft)//clientLeft: 13
    </script>
</body>
</html>

當(dāng)該元素出現(xiàn)滾動(dòng)條時(shí),元素的clientHeight= 400+20+20 = 440,這是沒有問題的,看到這里你一定清楚了“可視區(qū)域的”含義,我們接著往下看。

offset類型

offsetHeight:指向元素可視部分的padding-top+padding-bottom+height+border-top+border-bottom部分。

offsetWidth:指向元素可視部分的padding-left+padding-right+width+border-left+border-right部分。

clientTop:指當(dāng)前元素距離最近的已經(jīng)定位過的祖先元素的上邊距。

clientLeft:指當(dāng)前元素距離最近的已經(jīng)定位過的祖先元素的左邊距。

這里offsetHight/Width和clientHeight/Width是差不多的,區(qū)別在于offsetHeight/Width部分多添加了border部分, 我們著重看一下offsetTop和offsetLeft。代碼如下。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>尺寸及位置</title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        #container{
            width: 300px;
            height: 300px;
            background-color: antiquewhite;
            margin: 30px 60px;
            position: relative;
            padding: 30px;
            border: 10px solid;
        }
        #item{
            background-color: red;
            height: 40px;
            width: 40px;
            padding: 20px;
            border: 10px solid;
            overflow: auto;

        }
    </style>
</head>
<body>
    <div id="container">
        <div id="item"></div>
    </div>
    <script>
        const container = document.getElementById('item')
        console.log('offsetHeight:',container.offsetHeight) //offsetHeight: 100
        console.log('offsetWidth:',container.offsetWidth) //offsetWidth: 100
        console.log('offsetTop:',container.offsetTop)//offsetTop: 30
        console.log('offsetLeft:',container.offsetLeft)//offsetLeft: 30
    </script>
</body>
</html>

從代碼及結(jié)果圖里相信你就已經(jīng)理解了offsetTop和Left的邊界,這里一定要注意是相對(duì)于最近的定位過的祖先元素,只要定位過就可以,無論是絕對(duì)定位或者相對(duì)定位或者固定定位,只要定位(不包含initial) 即可。

scroll類型

scrollHeight:指向元素內(nèi)容的實(shí)際高度,包含該元素滾動(dòng)卷起來的部分高度。

scrollWidth:向元素內(nèi)容的實(shí)際寬度,包含該元素滾動(dòng)卷起來的部分寬度。

scrollTop:指向元素卷起來的高度。

clientLeft:指向元素卷起來的寬度。

scroll類型的尺寸及位置通常用在該元素存在滾動(dòng)條情況,當(dāng)元素不存在滾動(dòng)的情況下,scrollHeight/Width等同于 clientHeight/Width,讓我們看一下示例。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>尺寸及位置</title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        #container{
            width: 300px;
            height: 300px;
            background-color: antiquewhite;
            position: initial;
            padding: 30px;
            border: 10px solid;
            overflow: auto;
        }

    </style>
</head>
<body>
    <div id="container">
        <div style="height: 1000px;"></div>
    </div>
    <script>
        const container = document.getElementById('container')
        console.log('scrollHeight:',container.scrollHeight) //scrollHeight: 1060
        console.log('scrollWidth:',container.scrollWidth) //scrollWidth: 343
        console.log('scrollTop:',container.scrollTop)//scrollTop: 0
        console.log('scrollLeft:',container.scrollLeft)//scrollLeft: 0
    </script>
</body>
</html>

從代碼這可以看出,元素的高度300px,但是內(nèi)部的元素將整個(gè)父元素?fù)未?,這個(gè)時(shí)候元素的高度變?yōu)?1000+30+30,也就是內(nèi)部元素所占據(jù)的content大小加上上下padding,本質(zhì)與clientHeight的算法是相同的,只是內(nèi)容區(qū)域的高度不同。

此時(shí)我將滾動(dòng)條滑動(dòng)到底部,這個(gè)時(shí)候再看scrollTop的值。

我們能看到隨著滾動(dòng)條的滾動(dòng),scrollTop的值也在發(fā)生改變,指向卷起部分的高度,我們將卷起部分的高度加上可視部分的高度結(jié)果算出來的值等于scrollHeight,既 700+300+30+30 = 1060,因此在實(shí)際開發(fā)中,如果我們想要在滾動(dòng)條滑到底部進(jìn)行額外操作的化,我們可以通過該公式判斷滾動(dòng)條是否滑倒了元素底部。

總結(jié)

到此這篇關(guān)于JavaScript中DOM上的尺寸及位置屬性的文章就介紹到這了,更多相關(guān)JS DOM的尺寸及位置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文帶你了解一下JavaScript中什么是嚴(yán)格模式

    一文帶你了解一下JavaScript中什么是嚴(yán)格模式

    嚴(yán)格模式是?ECMAScript?5?引入的一種運(yùn)行模式,可以讓?JavaScript?在更加嚴(yán)格的條件下運(yùn)行,本文主要為大家詳細(xì)介紹了JavaScript中嚴(yán)格模式的使用,需要的可以參考下
    2023-11-11
  • JS異步的執(zhí)行原理和回調(diào)詳解

    JS異步的執(zhí)行原理和回調(diào)詳解

    這篇文章主要給大家介紹了關(guān)于JS異步的執(zhí)行原理和回調(diào)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 微信小程序與后臺(tái)PHP交互的方法實(shí)例分析

    微信小程序與后臺(tái)PHP交互的方法實(shí)例分析

    這篇文章主要介紹了微信小程序與后臺(tái)PHP交互的方法,結(jié)合實(shí)例形式分析了微信小程序基于wx.request(OBJECT)方法與后臺(tái)php程序交互相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-12-12
  • 詳解JS事件循環(huán)及宏任務(wù)微任務(wù)的原理

    詳解JS事件循環(huán)及宏任務(wù)微任務(wù)的原理

    在js中,我們一般將所有的任務(wù)都分成兩類,一種是同步任務(wù),另外一種是異步任務(wù)。而在異步任務(wù)中,又有著更加細(xì)致的分類,那就是微任務(wù)和宏任務(wù)。本文將詳細(xì)講解這二者的原理與使用,需要的可以參考一下
    2022-05-05
  • 頁面回到頂部的三種實(shí)現(xiàn)(錨標(biāo)記,js)

    頁面回到頂部的三種實(shí)現(xiàn)(錨標(biāo)記,js)

    本文不再介紹,大家根據(jù)自己需要選擇其中的一種即可,總之簡(jiǎn)約最美的,能減少代碼就減少代碼,能不調(diào)用的就別調(diào)用,要不是天緣博客的文章都是牛長(zhǎng)也不會(huì)添加這個(gè)功能
    2012-10-10
  • js實(shí)現(xiàn)盒子滾動(dòng)動(dòng)畫效果

    js實(shí)現(xiàn)盒子滾動(dòng)動(dòng)畫效果

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)盒子滾動(dòng)動(dòng)畫效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • JavaScript 判斷瀏覽器是否支持SVG的代碼

    JavaScript 判斷瀏覽器是否支持SVG的代碼

    SVG(可縮放矢量圖形),接下來將介紹下如何判斷瀏覽器是否支持SVG,感興趣的朋友可以參考下哈,希望本代碼對(duì)你有所幫助
    2013-03-03
  • 談?wù)劵趇frame、FormData、FileReader三種無刷新上傳文件的方法

    談?wù)劵趇frame、FormData、FileReader三種無刷新上傳文件的方法

    發(fā)請(qǐng)求有兩種方式,一種是用ajax,另一種是用form提交,默認(rèn)的form提交如果不做處理的話,會(huì)使頁面重定向。本篇文章通過實(shí)例給大家介紹基于iframe/FormData/FileReader三種無刷新上傳文件的方法,感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • JS實(shí)現(xiàn)上下左右對(duì)稱的九九乘法表

    JS實(shí)現(xiàn)上下左右對(duì)稱的九九乘法表

    九九乘法表使用很多種語言都可以實(shí)現(xiàn),本文給大家介紹js使用for、while循環(huán)來完成四種對(duì)稱的九九乘法表,對(duì)九九乘法表需要的朋友參考下
    2016-02-02
  • JavaScript實(shí)現(xiàn)單鏈表過程解析

    JavaScript實(shí)現(xiàn)單鏈表過程解析

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)單鏈表過程,鏈表中的元素在內(nèi)存中不必是連續(xù)的空間。鏈表的每個(gè)元素有一個(gè)存儲(chǔ)元素本身的節(jié)點(diǎn)和指向下一個(gè)元素的引用。下面請(qǐng)和小編一起進(jìn)入文章了解更多的詳細(xì)內(nèi)容吧
    2021-12-12

最新評(píng)論

二连浩特市| 屏南县| 万源市| 碌曲县| 徐水县| 龙泉市| 巴里| 阿巴嘎旗| 新沂市| 鲜城| 通渭县| 昭苏县| 苗栗市| 松滋市| 敖汉旗| 大安市| 大安市| 通渭县| 五原县| 西平县| 沈阳市| 武冈市| 仲巴县| 昌都县| 丰县| 赤水市| 浑源县| 新化县| 容城县| 齐齐哈尔市| 昌宁县| 巴中市| 汝州市| 古丈县| 凤城市| 彰武县| 玛纳斯县| 固安县| 新河县| 潞城市| 乡城县|