精講-offset系列、scroll系列、client系列~

前言:

相信不少人跟我同樣,在實際開發中有時候須要用到原生js來獲取一個元素的寬高,天真的覺得 document.getElementById('box').style.width 就能夠獲取到,可是結果常常事與願違~這也讓不少小夥伴摸不着頭腦~這裏我爲何要說常常而不說老是呢??是由於有時候能夠獲取有時候卻不能。what????(黑人問號臉)還有這種操做?碰到這種狀況的時候你是否是懷疑人生了,哈哈。。。。。bash

發生的緣由:之因此會出現有時候能夠獲取,有時候不能夠獲取的狀況,是由於親愛的你有時候把樣式寫在style標籤中了,有時候又把樣式寫在style屬性中了,你的不經意,卻形成了很是大的差距呢~post

有如下兩種狀況:測試

  • style標籤中設置的樣式屬性獲取不到;
  • style屬性中設置的樣式屬性是能夠獲取到的;

可是在實際開發中,咱們不多會把樣式寫在style屬性中,那該如何獲取呢?下面咱們就來講一下offset系列~ui

offset系列:

  • offsetWidth:獲取元素的寬(包含邊框)
  • offsetHeight:獲取元素的高(包含邊框)
  • offsetLeft:獲取元素距離左邊的值
  • offsetTop:獲取元素距離右邊的值
<style>
    #box1{
        width: 200px;
        height: 200px;
        background: pink;
        position: absolute;
        left: 100px;
        top: 50px;
    }
    #box2{
        width: 100px;
        height: 100px;
        background: lightgreen;
    }
    #btn{
        position: absolute;
        top: 250px;
    }
    </style>
    
    
<body>
    <div id="box1" style="width:200px">
        <div id="box2"></div>
    </div>
    <input type="button" value="按鈕" id="btn">

<script>
    var box1=document.getElementById('box1');
    var box2=document.getElementById('box2');
    document.getElementById('btn').onclick=function(){
        console.log(box1.style.width);      //200px
        console.log(box1.style.height);     //獲取不到
        console.log(box1.offsetWidth);      //200
        console.log(box1.offsetHeight);     //200
        console.log(box1.offsetLeft);       //100
        console.log(box1.offsetTop);        //50
    }
</script>
</body>
複製代碼

總結:由上能夠看出,offset系列獲取到的值都是數字類型,很容易操做spa

以上咱們主要是針對box1進行分析的,下面咱們對box2進行分析,按照如下兩種狀況依次分析,分析影響offsetLeft、offsetTop的因素有哪些(這裏以offsetLeft爲例):3d

  • 沒有脫離文檔流:code

    offsetLeft:父級元素margin+父級元素padding+父級元素的border+本身的margincdn

  • 脫離文檔流了:blog

    主要是本身的left和本身的margin ,與padding無關,與border無關 ip

scroll系列:

  • scrollWidth:元素中內容的實際的寬(沒有邊框),若是沒有內容或是內容不足就是元素的寬
  • scrollHeight:元素中內容的實際的高(沒有邊框),若是沒有內容或是內容不足就是元素的高
  • scrollLeft:向左捲曲出去的距離
  • scrollTop:向上捲曲出去的距離

該系列沒有什麼理解複雜的部分,經常使用的屬性通常就是scrollLeft、scrollTop這兩個屬性,就是捲曲出去的值,這裏我以爲也沒什麼可分析的,就來給你們看一下經常使用的場景:

client系列:可視區域

  • clientWidth:可視區域的寬(沒有邊框),邊框內部的寬度
  • clientHeight:可視區域的高(沒有邊框),邊框內部的高度
  • clientLeft:左邊邊框的寬度
  • clientTop:上面邊框的寬度

總結:由上圖能夠看出來,client獲取到的也是數字類型的值,並且clientLeft、clientTop結果與邊框有關,通過測試,給box加上margin、padding後,上圖的值不變,可見與margin、padding無關

最後:

看到這裏,你們對這三個系列我想已經有了必定的認識與瞭解,在這以前,我寫過一篇文章,原生js如何實現懶加載?,當時不理解這三個系列的寶寶們可能有點懵,如今回過頭去看我想應該很是easy了吧~

相關文章
相關標籤/搜索