最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

前端圖片懶加載(lazyload)的實(shí)現(xiàn)方法(提高用戶體驗(yàn))

 更新時(shí)間:2017年08月21日 09:03:01   投稿:mrr  
圖片懶加載又稱圖片延時(shí)加載、惰性加載,即在用戶需要使用圖片的時(shí)候加載,這樣可以減少請(qǐng)求,節(jié)省帶寬,提高頁(yè)面加載速度,相對(duì)的,也能減少服務(wù)器壓力,下面通過(guò)本文給大家分享圖片懶加載lazyload的實(shí)現(xiàn)方法,感興趣的朋友一起看看吧

定義

圖片懶加載又稱圖片延時(shí)加載、惰性加載,即在用戶需要使用圖片的時(shí)候加載,這樣可以減少請(qǐng)求,節(jié)省帶寬,提高頁(yè)面加載速度,相對(duì)的,也能減少服務(wù)器壓力。

惰性加載是程序人性化的一種體現(xiàn),提高用戶體驗(yàn),防止一次性加載大量數(shù)據(jù),而是根據(jù)用戶需要進(jìn)行資源的請(qǐng)求。

實(shí)現(xiàn)

懶加載的難點(diǎn)在于確定某張圖片是否是用戶需要的資源,在瀏覽器中,用戶需要的是可視區(qū)內(nèi)的資源,因此我們只需要判斷圖片是否已經(jīng)呈現(xiàn)在可視區(qū)內(nèi),當(dāng)圖片呈現(xiàn)在可視區(qū)內(nèi)時(shí),獲取圖片的真實(shí)地址并賦給該圖片即可(圖片寬高需要指定,可以利用padding處理)。

判斷是否存在于可視區(qū)

瀏覽器視口高度

待加載資源距離視口頂端位置

通過(guò)以上兩點(diǎn)即可判斷圖片是否位于可視區(qū)內(nèi)。

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

之后獲取圖片的真實(shí)地址

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

把真實(shí)地址賦給圖片

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

完整代碼

var scrollElement = document.querySelector('.page'),
  viewH = document.documentElement.clientHeight;
function lazyload(){
 var nodes = document.querySelectorAll('img[data-src]');
 Array.prototype.forEach.call(nodes,function(item,index){
  var rect;
  if(item.dataset.src==='') 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 = ''
    })(item)
  }
 })
}
lazyload();
scrollElement.addEventListener('scroll',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);
    }
  };
};

總結(jié)

以上所述是小編給大家介紹的前端圖片懶加載(lazyload)的實(shí)現(xiàn)方法(提高用戶體驗(yàn)),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 淺談鍵盤上回車按鈕的js觸發(fā)事件

    淺談鍵盤上回車按鈕的js觸發(fā)事件

    下面小編就為大家?guī)?lái)一篇淺談鍵盤上回車按鈕的js觸發(fā)事件。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • 微信小程序定位當(dāng)前城市的方法

    微信小程序定位當(dāng)前城市的方法

    這篇文章主要為大家詳細(xì)介紹了微信小程序定位當(dāng)前城市的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 詳解微信小程序中的頁(yè)面代碼中的模板的封裝

    詳解微信小程序中的頁(yè)面代碼中的模板的封裝

    這篇文章主要介紹了詳解微信小程序中的頁(yè)面代碼中的模板的封裝的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • three.js 入門案例詳解

    three.js 入門案例詳解

    本篇文章主要介紹了three.js 入門案例詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • js立即執(zhí)行函數(shù): (function ( ){})( ) 與 (function ( ){}( )) 有什么區(qū)別?

    js立即執(zhí)行函數(shù): (function ( ){})( ) 與 (function ( ){}( )) 有什么區(qū)別?

    這篇文章主要介紹了js立即執(zhí)行函數(shù): (function ( ){})( ) 與 (function ( ){}( )) 有什么區(qū)別,需要的朋友可以參考下
    2015-11-11
  • 深入淺析JavaScript的API設(shè)計(jì)原則

    深入淺析JavaScript的API設(shè)計(jì)原則

    這篇文章主要介紹了JavaScript的API設(shè)計(jì)原則,包括接口的流暢性,一致性,參數(shù)的處理,可擴(kuò)展性,對(duì)錯(cuò)誤的處理,可預(yù)見(jiàn)性,注釋和文檔的可讀性,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-06-06
  • javascript中判斷json的方法總結(jié)

    javascript中判斷json的方法總結(jié)

    JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式,采用完全獨(dú)立于語(yǔ)言的文本格式,是理想的數(shù)據(jù)交換格式。同時(shí),JSON是 JavaScript 原生格式,這意味著在 JavaScript 中處理 JSON數(shù)據(jù)不須要任何特殊的API或工具包,接下來(lái)跟著小編學(xué)習(xí)js中判斷json的方法吧
    2015-08-08
  • js和jquery批量綁定事件傳參數(shù)一(新豬豬原創(chuàng))

    js和jquery批量綁定事件傳參數(shù)一(新豬豬原創(chuàng))

    js綁定事件傳參,javascript綁定事件傳參數(shù),jquery綁定事件傳參數(shù)
    2010-06-06
  • javascript 跳轉(zhuǎn)代碼集合

    javascript 跳轉(zhuǎn)代碼集合

    網(wǎng)頁(yè)頁(yè)面客戶端腳本跳轉(zhuǎn)實(shí)現(xiàn)代碼。一般后臺(tái)語(yǔ)言多需要輸出一些js跟前臺(tái)的結(jié)合。
    2009-12-12
  • bootstrap suggest搜索建議插件使用詳解

    bootstrap suggest搜索建議插件使用詳解

    這篇文章主要為大家詳細(xì)介紹了bootstrap suggest搜索建議插件的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03

最新評(píng)論

淮阳县| 无锡市| 五台县| 临城县| 开江县| 交口县| 沁水县| 新蔡县| 正宁县| 阿巴嘎旗| 宕昌县| 社会| 台湾省| 洪湖市| 仪征市| 西峡县| 崇礼县| 厦门市| 蓝山县| 会东县| 同仁县| 昭通市| 靖江市| 长丰县| 桐梓县| 高碑店市| 溧阳市| 政和县| 临夏市| 大埔区| 合肥市| 青浦区| 浮山县| 微博| 定结县| 永济市| 桃园县| 隆回县| 罗源县| 格尔木市| 西畴县|