當(dāng)前案例,還存在一個(gè)小問(wèn)題,就是頁(yè)面加載如果不滾動(dòng)一下鼠標(biāo),就一直是默認(rèn)圖片,不過(guò)懶加載的原理還是能看出來(lái)滴,多多包涵哦!
JS代碼中有一些說(shuō)明注釋,可以詳細(xì)看一下哦!
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JS基礎(chǔ)-懶加載的原理與范例</title>
<style>
*{
margin: 0;
padding: 0;
}
body{
background-color: #cccccc;
}
h2{
line-height: 30px;
text-align: center;
margin: 10px auto;
}
img{
width: 400px;
height: 400px;
border: 1px dashed #cccccc;
margin-bottom: 10px;
display: block;
}
.lazy-container{
width: 400px;
background-color: #ffffff;
margin: 0 auto;
padding: 20px;
border-radius: 6px;
}
</style>
</head>
<body>
<h2>懶加載-范例</h2>
<div class="lazy-container">
<img src="images/temp.jpg" alt="" al="" data-src="images/1.jpg">
<img src="images/temp.jpg" alt="" al="" data-src="images/2.jpg">
<img src="images/temp.jpg" alt="" al="" data-src="images/3.jpg">
<img src="images/temp.jpg" alt="" al="" data-src="images/4.jpg">
<img src="images/temp.jpg" alt="" al="" data-src="images/5.jpg">
<img src="images/temp.jpg" alt="" al="" data-src="images/6.jpg">
<img src="images/temp.jpg" alt="" al="" data-src="images/7.jpg">
<img src="images/temp.jpg" alt="" al="" data-src="images/8.jpg">
<img src="images/temp.jpg" alt="" al="" data-src="images/9.jpg">
<img src="images/temp.jpg" alt="" al="" data-src="images/10.jpg">
<img src="images/temp.jpg" alt="" al="" data-src="images/11.jpg">
<img src="images/temp.jpg" alt="" al="" data-src="images/12.jpg">
<img src="images/temp.jpg" alt="" al="" data-src="images/13.jpg">
<img src="images/temp.jpg" alt="" al="" data-src="images/14.jpg">
<img src="images/temp.jpg" alt="" al="" data-src="images/15.jpg">
<img src="images/temp.jpg" alt="" al="" data-src="images/16.jpg">
<img src="images/temp.jpg" alt="" al="" data-src="images/17.jpg">
<img src="images/temp.jpg" alt="" al="" data-src="images/18.jpg">
<img src="images/temp.jpg" alt="" al="" data-src="images/19.jpg">
<img src="images/temp.jpg" alt="" al="" data-src="images/20.jpg">
<img src="images/temp.jpg" alt="" al="" data-src="images/21.jpg">
<img src="images/temp.jpg" alt="" al="" data-src="images/22.jpg">
<img src="images/temp.jpg" alt="" al="" data-src="images/23.jpg">
<img src="images/temp.jpg" alt="" al="" data-src="images/24.jpg">
</div>
<script src="js/lazy.js"></script>
</body>
</html>
/**
* 概念:
* 1-可視區(qū):我們可以直接看見(jiàn)的 頁(yè)面內(nèi)容區(qū)域;
* 2-滾動(dòng)距離:可是區(qū)邊框,距離文檔頂部的距離
* (一個(gè)web頁(yè)面一般都存在滾動(dòng)條,滾動(dòng)距離就是滾出的部分);
* 3-相對(duì)頂部距離:就是頁(yè)面元素,相對(duì)于文檔頂部的距離(也就是HTML標(biāo)簽);
*
* 涉及屬性:
* 1-document.documentElement: 文檔根節(jié)點(diǎn) HTML標(biāo)簽;
* 2-clientHeight: 當(dāng)前元素可視區(qū)的高度;
* 3-scrollTop: 當(dāng)前元素的滾動(dòng)距離;
* 4-offsetTop: 當(dāng)前元素相對(duì)頂部距離
*
* 原理:
* 1-整個(gè)頁(yè)面的可視區(qū)是HTML標(biāo)簽的區(qū)域;
* 2-如果當(dāng)前元素的 `相對(duì)頂部距離`>= 可視區(qū)高度+滾動(dòng)距離,那么就加載元素
* 否則暫不加載;
*/
//獲取所有圖片
var imgs = document.querySelectorAll('img');
//獲取頁(yè)面可視區(qū)高度
var clientHeight = document.documentElement.clientHeight;
//滾動(dòng)事件監(jiān)聽(tīng)器
window.addEventListener('scroll',function(event){
//獲取滾動(dòng)距離
var scrollTop = document.documentElement.scrollTop;
//遍歷圖片,根據(jù)是否在可視區(qū)域,替換 src屬性值
imgs.forEach(function(img){
if(img.offsetTop<=(clientHeight+scrollTop)){
img.src=img.dataset.src;
}
});
},false);
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)