原生javascript圖片懶載入效果程式碼。
阿新 • • 發佈:2019-02-16
原理是先獲取頁面所需懶載入的所有圖片物件,然後分別計算圖片距離頂部的距離是否小於螢幕可見高度+頁面滾動高度,即元素是否從下滾動到眼球可見位置,如果小於,那麼將自定義的data-src屬性中的值(即圖片的URL地址賦值給src屬性,完成請求載入)。監聽頁面滾動事件即可!定義n 值儲存起來可以更好的記錄到滾動可見的圖片,避免重複迴圈,提高效能。
<!doctype html>
<html>
<head>
<title>index</title>
<meta charset="utf-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" >
<meta name="keywords" content="{$web['web_key']}"> <!--關鍵詞-->
<meta name="description" content="{$web['web_description']}"> <!--網站描述-->
</head>
<body >
<div style="width:100%;overflow:hidden;"> <!--容器標籤開始-->
<!--header start-->
<include file="common/header"/>
<!--header end-->
<!--mainBox start-->
<div class="main">
<div class="article-list">
<div class="container title">
<h5>註冊香港公司相關資料</h5>
<!-- <a href="" class="more">檢視全部 >></a> -->
</div>
<div class="container list">
<foreach name="art" item="value">
<dl>
<dt>
<img src="" alt="" title="{$value['art_title']}" data-src="">
</dt>
<dd class="title">
<a href=""><strong></strong></a>
</dd>
<dd class="detail">
{$value['art_intro']}
</dd>
<dd class="detail">{$value['art_addtime']|date="Y-m-d H:i:s",###}</dd>
<dd class="consolution">
<!-- <a href="" target="_blank">立即諮詢>></a> -->
<a href="" title="" target="_blank">瞭解更多>></a>
</dd>
</dl>
</foreach>
</div>
</div>
<!--footer start-->
<include file="common/footer"/>
<!--footer end-->
</div>
<!--mainBox end-->
</div><!--容器標籤結束-->
</body>
<script>
!function(){
//獲取元素距離頁面頂部的絕對距離
function getAbsPoint(e)
{
var x = e.offsetLeft;
var y = e.offsetTop;
while(e = e.offsetParent)
//等同於while(e.offsetParent){e = e.offsetParent}
{
x += e.offsetLeft;
y += e.offsetTop;
}
return {'x': x, 'y': y};
};
var imgs = document.getElementsByTagName("img");
var num = imgs.length;
var n = 0; //儲存圖片載入到的位置,避免每次都從第一張圖片開始遍歷
lazyload(); //頁面載入完畢載入可是區域內的圖片
window.onscroll = lazyload;
function lazyload() { //監聽頁面滾動事件
var seeHeight = document.documentElement.clientHeight; //可見區域高度
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; //滾動條距離頂部高度
for (var i = n; i < num; i++) {
//判斷圖片距離頁面頂部的位置是否小於螢幕可見高度+頁面滾動高度,即元素是否從下滾動到眼球可見位置
if (getAbsPoint(imgs[i]).y < seeHeight + scrollTop) {
if (imgs[i].getAttribute("src") == "") {
imgs[i].src = imgs[i].getAttribute("data-src");
}
n = i + 1;
}
}
}
}();
</script>
</html>