前端學習系列——(十二)JS獲取元素大小及懶加載應用實現

1、滾動大小

scrollHeight: 在沒有滾動條的情況下,元素內容的總高度。

scrollWidth:在沒有滾動條的情況下,元素內容的總寬度

scrollLeft:被隱藏在內容區域左側的像素數。通過設置這個屬性可以改變元素的滾動位置。

scrollTop:被隱藏的內容區域上方的像素數。通過設置這個屬性可以改變元素的滾動位置。

scrollHeight和scrollWidth主要用於確定元素內容的實際大小

 

 

2、客戶區大小

客戶區大小是指元素內容即其邊框所佔據的空間大小。clientWidth和clientHeight。滾動條佔用的空間不計算在內。

元素內部的空間大小:document.element.clientWidth

獲取瀏覽器窗口大小:document.documentElement.clientHeight(表示HTML文檔所在窗口的當前高度)。還有一種方式是window.innerHeight

 

 

3、偏移量

offsetHeight:元素在垂直方向上佔用的空間大小,以像素計。包括元素的高度、(可見的)水平滾動條的寬度、上邊框高度和下邊框高度;

offsetWidth:元素在水平方向上佔用的空間大小,以像素計。包括元素的寬度、(可見的)垂直滾動條的寬度、左邊框寬度和右邊框寬度;

offsetLeft:元素的左外邊框至包含元素的左內邊框之間的像素距離;包含元素爲offsetParent。

offsetTop:元素的上外邊框至包含元素的上內邊框之間的像素距離;包含元素爲offsetParent。

3.1 offsetParent

offsetParent:與當前元素最近的經過定位(不爲static)的父級元素。

1)元素自身有fixed定位,offsetParent的結果null

2)元素自身無fixed定位,且父級元素都未經過定位,offsetParent的結果爲<body>

3)元素自身無fixed定位,且父級元素存在經過定位的元素,offsetParent的結果爲離自身元素最近的經過定位的父級元素

4)<body>元素的parentNode是null

 

3.2 頁面偏移量

某個父元素在頁面上的偏移量,將這個元素的offsetLeft和offsetTop與其offsetParent的相同屬性相加,並加上offsetParent的相應方向的邊框,如此循環直到根元素,皆可以得到元素到頁面的偏移量。

 

3.3 注意點

1)所有偏移量的屬性都是隻讀的

2)若元素設置display:none,則它的偏移量屬性都爲0

3)每次訪問偏移量屬性都需要重新計算,因此儘量避免重複訪問這些屬性

 

4、瀏覽器窗口可視區域大小

即網頁可見區域寬高,不包括工具欄和滾動條

1)對於IE9+、chrome、firefox、Opera、Safari

window.innerHeight瀏覽器窗口的內部高度;

window.innerWidth瀏覽器窗口的內部寬度;

2)對於IE8.7.6.5

document.documentElement.clientHeight:表示HTML文檔所在窗口的當前高度;

document.documentElement.clientWidth:表示HTML文檔所在窗口的當前寬度;

如要使用這個特性,可以用下面的兼容寫法

var width = document.documentElement.clientWidth || window.innerWidth;
var height = document.documentElement.clientHeight || window.innerHeight;

 

5、懶加載

利用這些獲取元素大小的方法,可以實現圖片的懶加載。

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>懶加載</title>
    <style>
        .box1 {
            height: 2000px;
            background-color: red;
        }
    </style>
</head>
<body>
    <div class="box1"></div>
    <img id="showImg" data-src="./test.png">
</body>
<script>
    window.onscroll = function(){
        var img = document.getElementById("showImg"),
            clientHeight = document.documentElement.clientHeight || window.innerHeight,//獲取屏幕可視區的高度
            offsetTop = img.offsetTop,//獲取元素上外邊框與父元素上內邊框之間的像素差
            scrollTop = document.body.scrollTop;//獲取滾動條滾去的高度
        //console.log(offsetTop, scrollTop, clientHeight);
        //下面是判斷img標籤是否進入可視區
        if(offsetTop <= clientHeight + scrollTop) {
            img.src = img.dataset.src;
        }
    };
</script>
</html>

 

部分內容參考《JS高級程序設計第三版》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章