如何用原生js寫一個(gè)懶加載頁面帶漸變效果
懶加載經(jīng)常是我們性能優(yōu)化經(jīng)常使用的方案,那么我們今天就實(shí)現(xiàn)一波。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>懶加載</title>
<style>
img {
display: block;
margin: 0 auto 50px;
width: 960px;
height: 540px;
}
.opacity {
animation: .5s ani linear;
-webkit-animation: .5s ani linear;
-moz-animation: .5s ani linear;
}
@keyframes ani {
0% {
opacity: 0;
}
50% {
opacity: .5;
}
100% {
opacity: 1;
}
}
</style>
</head>
<body>
<img src="" data-src="http://ww1.sinaimg.cn/large/005ODVHQgy1fuzutb8xegj31hc0u0k77.jpg" alt="">
<img src="" data-src="http://ww1.sinaimg.cn/large/005ODVHQgy1fuzutz6y29j31hc0u0ak4.jpg" alt="">
<img src="" data-src="http://ww1.sinaimg.cn/large/005ODVHQgy1fuzuu8igyyj31hc0u0qgv.jpg" alt="">
<img src="" data-src="http://ww1.sinaimg.cn/large/005ODVHQgy1fuzuug47wrj31hc0u0k2q.jpg" alt="">
<img src="" data-src="http://ww1.sinaimg.cn/large/005ODVHQgy1fuzuuowb0hj31hc0u0akx.jpg" alt="">
<img src="" data-src="http://ww1.sinaimg.cn/large/005ODVHQgy1fuzuuyjapsj31hc0u0ths.jpg" alt="">
</body>
<script>
var len = document.getElementsByTagName('img').length;
var img = document.getElementsByTagName("img");
var n = 0; // 存儲(chǔ)圖片加載到的位置,避免每次都從第一張圖片開始遍歷
lazyload();// 頁面載入完畢加載可視區(qū)域內(nèi)的圖片
// 監(jiān)聽頁面滾動(dòng)事件
window.onscroll = function () {
lazyload();
};
// 封裝懶加載函數(shù)
function lazyload() {
// 可見區(qū)域高度
var seeHeight = document.documentElement.clientHeight;
// 滾動(dòng)條距離頂部高度
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
for (var i = n; i < len; i++) {
// 如果圖片距頂部距離小于可見區(qū)域高度與滾動(dòng)條距離頂部高度之和時(shí),才顯示圖片
if (img[i].offsetTop < seeHeight + scrollTop) {
if (img[i].getAttribute("src") == "") {
img[i].setAttribute('class', 'opacity');
img[i].src = img[i].getAttribute("data-src");
}
n = i + 1;
}
}
}
</script>
</html>
作者:Vam的金豆之路
主要領(lǐng)域:前端開發(fā)
我的微信:maomin9761
微信公眾號(hào):前端歷劫之路