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

JavaScript實(shí)現(xiàn)圖片懶加載的方法分析

 更新時(shí)間:2018年07月05日 09:23:58   作者:king-w  
這篇文章主要介紹了JavaScript實(shí)現(xiàn)圖片懶加載的方法,結(jié)合實(shí)例形式分析了javascript圖片懶加載的原理、操作步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下

本文實(shí)例講述了JavaScript實(shí)現(xiàn)圖片懶加載的方法。分享給大家供大家參考,具體如下:

懶加載是非常實(shí)用的提升網(wǎng)頁(yè)性能的方式,當(dāng)訪問(wèn)一個(gè)頁(yè)面的時(shí)候,只顯示可視區(qū)域內(nèi)的圖片,其它的圖片只有出現(xiàn)在可視區(qū)域內(nèi)的時(shí)候才會(huì)被請(qǐng)求加載。

我們現(xiàn)在用原生的js實(shí)現(xiàn)簡(jiǎn)單的圖片懶加載,主要利用的原理就是先不給設(shè)置src,而是把圖片的路徑放在data-src中,等待圖片被加載的時(shí)候?qū)⒙窂饺〕龇诺?span style="color: #0000ff">src中。

HTML代碼

<div class="container">
 <div class="img-area">
  <img class="my-photo" alt="loading" data-src="img/img1.png">
 </div>
 <div class="img-area">
  <img class="my-photo" alt="loading" data-src="img/img2.png">
 </div>
 <div class="img-area">
  <img class="my-photo" alt="loading" data-src="img/img3.png">
 </div>
 <div class="img-area">
  <img class="my-photo" alt="loading" data-src="img/img4.png">
 </div>
 <div class="img-area">
  <img class="my-photo" alt="loading" data-src="img/img5.png">
 </div>
</div>

判斷元素是否在可視區(qū)域

方法一:

1. 獲取屏幕可視區(qū)高度:document.documentElement.clientHeight
2. 獲取元素距頂部的高度:element.offsetTop
3. 獲取滾動(dòng)高度:document.documentElement.scrollTop
4. 若滿足:2-3<1,那么元素就出現(xiàn)在可視區(qū)域

方法二:

1. 獲取元素到可視區(qū)域頂部的距離:var bound = element.getBoundingClientRect()
2. 獲取可視區(qū)域的高度:window.innerHeight
3. 若滿足bound.top<=window.innerHeight,那么元素就出現(xiàn)在可視區(qū)域

方法三:

利用IntersectionObserver函數(shù)自動(dòng)觀察元素是否在可視區(qū)域內(nèi)

var watch = new IntersectionObserver(callback,option);
//開(kāi)始觀察
watch.observe(el);
//停止觀察
watch.unobserve(el);
//關(guān)閉觀察器
watch.disconnect();

js代碼

第一種很多人都用過(guò),所以我們就用第二種寫(xiě)一下

//判斷圖片是否出現(xiàn)在可視區(qū)域內(nèi)
function isInSight(el) {
    const bound = el.getBoundingClientRect();
    const clientHeight = window.innerHeight;
    return bound.top <= clientHeight + 100;
}
//加載圖片
let index = 0;
function checkImgs() {
    const imgs = document.querySelectorAll('.my-photo');
    for( let i = index; i < imgs.length; i++){
      if(isInSight(imgs[i])){
        loadImg(imgs[i]);
        index = i;
      }
    }
}
function loadImg(el) {
    if(!el.src){
      const source = el.dataset.src;
      el.src = source;
    }
}
//函數(shù)節(jié)流
//函數(shù)節(jié)流是很重要的思想,可以防止過(guò)于頻繁的操作dom
function throttle(fn,mustRun = 500) {
    const timer = null;
    let previous = null;
    return function () {
      const now = new Date();
      const context = this;
      const args = arguments;
      if(!previous){
        previous = now;
      }
      const remaining = now -previous;
      if(mustRun && remaining >= mustRun){
        fn.apply(context,args);
        previous = now;
      }
    }
  }
//調(diào)用函數(shù)
window.onload=checkImgs;
window.onscroll = throttle(checkImgs);

我們?cè)谟玫谌N方法寫(xiě)一個(gè)demo

function checkImgs() {
 const imgs = Array.from(document.querySelectorAll(".my-photo"));
 imgs.forEach(item => io.observe(item));
}
function loadImg(el) {
 if (!el.src) {
  const source = el.dataset.src;
  el.src = source;
 }
}
const io = new IntersectionObserver(ioes => {
 ioes.forEach(ioe => {
  const el = ioe.target;
  const intersectionRatio = ioe.intersectionRatio;
  if (intersectionRatio > 0 && intersectionRatio <= 1) {
   loadImg(el);
  }
  el.onload = el.onerror = () => io.unobserve(el);
 });
});

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript圖片操作技巧大全》、《JavaScript運(yùn)動(dòng)效果與技巧匯總》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Java 正則表達(dá)式學(xué)習(xí)總結(jié)和一些小例子

    Java 正則表達(dá)式學(xué)習(xí)總結(jié)和一些小例子

    字符串處理是許多程序中非常重要的一部分,它們可以用于文本顯示,數(shù)據(jù)表示,查找鍵和很多目的.在Unix下,用戶可以使用正則表達(dá)式的強(qiáng)健功能實(shí)現(xiàn)這些 目的
    2012-09-09
  • 利用JS屏蔽頁(yè)面中的Enter按鍵提交表單的方法

    利用JS屏蔽頁(yè)面中的Enter按鍵提交表單的方法

    下面小編就為大家?guī)?lái)一篇利用JS屏蔽頁(yè)面中的Enter按鍵提交表單的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-11-11
  • Google Map Api和GOOGLE Search Api整合實(shí)現(xiàn)代碼

    Google Map Api和GOOGLE Search Api整合實(shí)現(xiàn)代碼

    將GOOGLE MAP API 和 GOOGLE Search API 進(jìn)行整合,我用面向?qū)ο蟮姆绞綄?xiě)了一個(gè)類,通過(guò)傳一個(gè)經(jīng)緯度進(jìn)去,自動(dòng)通過(guò)GOOGLE LOCAL SEARCH獲取附近的相關(guān)信息。比如餐廳、景點(diǎn)等,反過(guò)來(lái)標(biāo)到地圖上,并可在任意容器內(nèi)顯示。
    2009-07-07
  • JavaScript必知必會(huì)(三) String .的方法來(lái)自何方

    JavaScript必知必會(huì)(三) String .的方法來(lái)自何方

    這篇文章主要介紹了JavaScript必知必會(huì)(三) String .的方法來(lái)自何方的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • 前端實(shí)現(xiàn)多個(gè)內(nèi)容滑動(dòng)輪播圖效果實(shí)例

    前端實(shí)現(xiàn)多個(gè)內(nèi)容滑動(dòng)輪播圖效果實(shí)例

    在前端開(kāi)發(fā)中,滑動(dòng)輪播圖是一種常見(jiàn)的交互元素,用于展示多張圖片或內(nèi)容,這篇文章主要介紹了前端實(shí)現(xiàn)多個(gè)內(nèi)容滑動(dòng)輪播圖效果的相關(guān)資料,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2025-04-04
  • javascript function(函數(shù)類型)使用與注意事項(xiàng)小結(jié)

    javascript function(函數(shù)類型)使用與注意事項(xiàng)小結(jié)

    這篇文章主要介紹了javascript function(函數(shù)類型)使用與注意事項(xiàng),結(jié)合實(shí)例形式較為詳細(xì)的分析了Function(函數(shù))類型的基本聲明、屬性、方法相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2019-06-06
  • 網(wǎng)頁(yè)防止tab鍵的使用快速解決方法

    網(wǎng)頁(yè)防止tab鍵的使用快速解決方法

    在彈出層后,tab鍵還可以在目頁(yè)中操作,這回導(dǎo)致腳本錯(cuò)誤。那么我們?nèi)绻苊膺@種情況呢?下面小編就為大家介紹一下如何解決這個(gè)問(wèn)題
    2013-11-11
  • javascript prototype原型操作筆記

    javascript prototype原型操作筆記

    在 JavaScript 中,prototype 不但能讓對(duì)象共享自己財(cái)富,而且 prototype 還有尋根問(wèn)祖的天性,從而使得先輩們的遺產(chǎn)可以代代相傳。
    2009-12-12
  • 頁(yè)面按鈕禁用與解除禁用的方法

    頁(yè)面按鈕禁用與解除禁用的方法

    這篇文章主要介紹了頁(yè)面按鈕禁用與解除禁用的方法,需要的朋友可以參考下
    2014-02-02
  • 五十音小游戲中的前端知識(shí)小結(jié)

    五十音小游戲中的前端知識(shí)小結(jié)

    本文內(nèi)容主要介紹小游戲開(kāi)發(fā)流中程涉及到的前端知識(shí)的如深色模式、離線緩存、櫻花動(dòng)畫(huà)、橫屏判斷等知識(shí)的歸納介紹和個(gè)人收獲總結(jié),感興趣的朋友一起看看吧
    2021-10-10

最新評(píng)論

岳池县| 泉州市| 榕江县| 丰都县| 舟山市| 屏东市| 沛县| 沂水县| 顺义区| 逊克县| 达日县| 太康县| 响水县| 黄梅县| 荃湾区| 台南县| 杂多县| 武山县| 涞源县| 乃东县| 南雄市| 温州市| 棋牌| 姚安县| 柞水县| 岳阳市| 章丘市| 商都县| 贵德县| 亳州市| 兴海县| 吉安市| 保亭| 白河县| 兴国县| 陇南市| 朝阳市| 叙永县| 甘肃省| 化德县| 铅山县|