首頁  >  文章  >  web前端  >  JavaScript實作圖片的懶載入方法介紹

JavaScript實作圖片的懶載入方法介紹

巴扎黑
巴扎黑原創
2017-08-22 17:22:441520瀏覽

圖片懶加載又稱圖片延時加載、惰性加載,即在用戶需要使用圖片的時候加載,這樣可以減少請求,節省頻寬,提高頁面加載速度,相對的,也能減少伺服器壓力,下面通過本文跟大家分享圖片懶載入lazyload的實作方法,有興趣的朋友一起看看吧

#定義

圖片懶載入又稱圖片延時加載、惰性加載,即在用戶需要使用圖片的時候加載,這樣可以減少請求,節省頻寬,提高頁面加載速度,相對的,也能減少伺服器壓力。

惰性載入是程式人性化的一種體現,提高用戶體驗,防止一次性加載大量數據,而是根據用戶需求進行資源的請求。

實作

懶載入的難度在於確定某張圖片是否是使用者需要的資源,在瀏覽器中,使用者需要的是視覺區內的資源,因此我們只需要判斷圖片是否已經呈現在可視區內,當圖片呈現在可視區內時,獲取圖片的真實地址並賦給該圖片即可(圖片寬高需要指定,可以利用padding處理)。

判斷是否存在於視覺區

瀏覽器視窗高度

待載入資源距離視窗頂端位置

通過以上兩點即可判斷圖片是否位於可視區內。


var nodes = document.querySelectorAll('img[src]'),
  elem = nodes[0],
  rect = elem.getBoundingClientRect(),
  vpHeight = document.documentElement.clientHeight;
if(rect.top < vpHeight && rect.bottom>=0) {
 console.log(&#39;show&#39;)
}

之後取得圖片的真實位址


#
<img src="loading.gif" alt="" src="1.gif">
...
<script data-filtered="filtered">
  var src = elem.dataset.src;
</script>

把真實位址賦給圖片


var img = new Image();
img.onload = function(){
 elem.src = img.src;
}
img.src = src;

完整程式碼


#
var scrollElement = document.querySelector(&#39;.page&#39;),
  viewH = document.documentElement.clientHeight;
function lazyload(){
 var nodes = document.querySelectorAll(&#39;img[src]&#39;);
 Array.prototype.forEach.call(nodes,function(item,index){
  var rect;
  if(item.dataset.src===&#39;&#39;) return;
  rect = item.getBoundingClientRect();
  if(rect.bottom>=0 && rect.top < viewH){
    (function(item){
     var img = new Image();
     img.onload = function(){
      item.src = img.src;
     }
     img.src = item.dataset.src
     item.dataset.src = &#39;&#39;
    })(item)
  }
 })
}
lazyload();
scrollElement.addEventListener(&#39;scroll&#39;,throttle(lazyload,500,1000));
function throttle(fun, delay, time) {
  var timeout,
    startTime = new Date();
  return function() {
    var context = this,
      args = arguments,
      curTime = new Date();
    clearTimeout(timeout);
    if (curTime - startTime >= time) {
      fun.apply(context, args);
      startTime = curTime;
    } else {
      timeout = setTimeout(fun, delay);
    }
  };
};

以上是JavaScript實作圖片的懶載入方法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn