亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

javascript實現圖片延遲加載方法匯總(三種方法)

2019-11-20 11:40:48
字體:
來源:轉載
供稿:網友

看到一些大型網站,頁面如果有很多圖片的時候,當你滾動到相應的行時,當前行的圖片才即時加載的,這樣子的話頁面在打開只加可視區域的圖片,而其它隱藏的圖片則不加載,一定程序上加快了頁面加載的速度,對于比較長的頁面來說,這個方案是比較好的。原理是這樣:頁面可見區域以下的圖片先不加載,等到用戶向下滾動到圖片位置時,再進行加載。這樣做的好處在哪里?――當頁面有好幾屏內容時,有可能用戶只看前幾屏的內容,這樣我們就可以只加載用戶需要看的圖片,減少服務器向用戶瀏覽器發送圖片文件所產生的負荷,下面通過三種方法給大家介紹js實現圖片延時加載。

js實現圖片延遲加載方法一:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html>  <head>   <title>lazyImage2.html</title>   <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">   <meta http-equiv="description" content="this is my page">   <meta http-equiv="content-type" content="text/html; charset=UTF-8">   <!--<link rel="stylesheet" type="text/css" href="./styles.css" mce_href="styles.css">-->  </head>  <body style="text-align:center" mce_style="text-align:center">  <p>  </p><p> </p><p> </p><p> </p><p> </p>   <div style="height:1290px;width:800px;border:1px;background:gray;"></div>   <div style="height:150px;width:800px;border:1px;background:green;"></div>   <img class="lazy" src="images/sprite.gif" mce_src="images/sprite.gif" alt="images/lazyloadImg.jpg" />   <script type="text/javascript"><!--       var temp = -1;//用來判斷是否是向下滾動(向上滾動就不需要判斷延遲加載圖片了)       window.onscroll = function() {       var imgElements = document.getElementsByTagName("img");       var lazyImgArr = new Array();       var j = 0;       for(var i=0; i<imgElements.length; i++) {        if(imgElements[i].className == "lazy"){         lazyImgArr[j++] = imgElements[i];        }       }               var scrollHeight = document.body.scrollTop;//滾動的高度       var bodyHeight = document.body.offsetHeight;//body(頁面)可見區域的總高度       if(temp < scrollHeight) {//為true表示是向下滾動,否則是向上滾動,不需要執行動作。        for(var k=0; k<lazyImgArr.length; k++) {        var imgTop = lazyImgArr[k].offsetTop;//1305(圖片縱坐標)        if((imgTop - scrollHeight) <= bodyHeight) {         lazyImgArr[k].src = lazyImgArr[k].alt;         lazyImgArr[k].className = "notlazy"                }       }       temp = scrollHeight;      }     }; // --></script>  </body> </html>

js實現網頁圖片延時加載方法二:

再沒貼代碼之前先給大家講下js實現圖片延時加載的原理。

實現原理:

把所有需要延時加載的圖片改成如下的格式:

<img lazy_src="圖片路徑" border="0"/>

然后在頁面加載時,把所有使用了lazy_src的圖片都保存到數組里,然后在滾動時計算可視區域的top,然后把延時加載的圖片中top小于當前可視區域(即圖片出現在可視區域內)的圖片的src的值用lazy_src的來替換(加載圖片):

JS代碼:

lazyLoad = (function() {  var map_element = {};  var element_obj = [];  var download_count = 0;  var last_offset = -1;  var doc_body;  var doc_element;  var lazy_load_tag;  function initVar(tags) {    doc_body = document.body;    doc_element = document.compatMode == 'BackCompat' ? doc_body : document.documentElement;    lazy_load_tag = tags || ["img", "iframe"];  };  function initElementMap() {    var all_element = [];    //從所有相關元素中找出需要延時加載的元素     for (var i = 0,len = lazy_load_tag.length; i < len; i++) {      var el = document.getElementsByTagName(lazy_load_tag[i]);      for (var j = 0,len2 = el.length; j < len2; j++) {        if (typeof (el[j]) == "object" && el[j].getAttribute("lazy_src")) {          element_obj.push(all_element[key]);        }      }    }    for (var i = 0,len = element_obj.length; i < len; i++) {      var o_img = element_obj[i];      var t_index = getAbsoluteTop(o_img); //得到圖片相對document的距上距離       if (map_element[t_index]) {        map_element[t_index].push(i);      } else {        //按距上距離保存一個隊列         var t_array = [];        t_array[0] = i;        map_element[t_index] = t_array;        download_count++; //需要延時加載的圖片數量       }    }  };  function initDownloadListen() {    if (!download_count) return;    var offset = (window.MessageEvent && !document.getBoxObjectFor) ? doc_body.scrollTop : doc_element.scrollTop;    //可視化區域的offtset=document的高+     var visio_offset = offset + doc_element.clientHeight;    if (last_offset == visio_offset) {      setTimeout(initDownloadListen, 200);      return;    }    last_offset = visio_offset;    var visio_height = doc_element.clientHeight;    var img_show_height = visio_height + offset;    for (var key in map_element) {      if (img_show_height > key) {        var t_o = map_element[key];        var img_vl = t_o.length;        for (var l = 0; l < img_vl; l++) {          element_obj[t_o[l]].src = element_obj[t_o[l]].getAttribute("lazy_src");        }        delete map_element[key];        download_count--;      }    }    setTimeout(initDownloadListen, 200);  };  function getAbsoluteTop(element) {    if (arguments.length != 1 || element == null) {      return null;    }    var offsetTop = element.offsetTop;    while (element = element.offsetParent) {      offsetTop += element.offsetTop;    }    return offsetTop;  }  function init(tags) {    initVar(tags);    initElementMap();    initDownloadListen();  };  return {    init: init  }})();

使用方法:把頁面上需要延時加載的圖片src改成為lazy_src,然后把上面的js放到body最后面,然后調用:lazyLoad.init();
調戲的方法可以使用firebug來查看一時圖片是否是延時加載。

另外:

如果你的頁面上存在有內容切換的欄目的話,可能在切換時切換的內容里的圖片可能會不顯示,處理的方法是在內容時單獨圖片加載處理,如:

///切換內容的代碼…chlid.find("img[init_src]").each(function(){   $(this).attr("src",$(this).attr("init_src"));   $(this).removeAttr("init_src");  });

原生態js實現圖片延時加載方法三:

 <!doctype html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>通過原生js延遲加載圖片</title><style type="text/css">    div{width:100px;height:100px;background:#F00;margin-bottom:30px}</style></head><body>  <div><img data-url="http://www.pokemon.name/w/image/Sprites/PDW/001.png  " src="a.gif" /></div>  <div><img data-url="http://www.pokemon.name/w/image/Sprites/PDW/002.png  " src="a.gif" /></div>  <div><img data-url="http://www.pokemon.name/w/image/Sprites/PDW/003.png  " src="a.gif" /></div>  <div><img data-url="http://www.pokemon.name/w/image/Sprites/PDW/004.png  " src="a.gif" /></div></body>//以上圖片測試時可用復制多點<script type="text/javascript">    (function(){        //common        function tagName(tagName){            return document.getElementsByTagName(tagName);        }        function $(id){            return document.getElementById(id);        }        function addEvent(obj,type,func){            if(obj.addEventListener){                obj.addEventListener(type,func,false);                }else if(obj.attachEvent){                obj.attachEvent('on'+type,func);            }        }        //這里可以按照需要配置些參數        var v={            eleGroup:null,            eleTop:null,            eleHeight:null,            screenHeight:null,            visibleHeight:null,            scrollHeight:null,            scrolloverHeight:null,            limitHeight:null        }        //對數據進行初始化        function init(element){            v.eleGroup=tagName(element)            screenHeight=document.documentElement.clientHeight;            scrolloverHeight=document.body.scrollTop;            for(var i=0,j=v.eleGroup.length;i<j;i++){                if(v.eleGroup[i].offsetTop<=screenHeight && v.eleGroup[i].getAttribute('data-url')){                    v.eleGroup[i].setAttribute('src',v.eleGroup[i].getAttribute('data-url'));                    v.eleGroup[i].removeAttribute('data-url')                }                }        }        function lazyLoad(){            if(document.body.scrollTop == 0){                limitHeight=document.documentElement.scrollTop+document.documentElement.clientHeight;            }else{                limitHeight=document.body.scrollTop+document.documentElement.clientHeight;            }            for(var i=0,j=v.eleGroup.length;i<j;i++){                if(v.eleGroup[i].offsetTop<=limitHeight && v.eleGroup[i].getAttribute('data-url')){                    v.eleGroup[i].src=v.eleGroup[i].getAttribute('data-url');                    v.eleGroup[i].removeAttribute('data-url')                }                }        }        init('img')        addEvent(window,'scroll',lazyLoad);    })()         </script></html>

以上內容通過三種方法介紹了js實現圖片延時加載,希望大家喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av成人在线| 黑人与娇小精品av专区| 欧美二区在线播放| 亚洲女人天堂网| 欧美孕妇与黑人孕交| 欧美一级黑人aaaaaaa做受| 国产欧美婷婷中文| 亚洲无线码在线一区观看| 亚洲高清av在线| 亚洲va国产va天堂va久久| 欧美中文字幕第一页| 97视频国产在线| 午夜精品一区二区三区在线播放| 韩国福利视频一区| 日韩精品黄色网| 精品国产网站地址| 91情侣偷在线精品国产| 亚洲xxxx做受欧美| 亚洲高清福利视频| 欧美亚洲激情在线| 国产mv免费观看入口亚洲| 欧美精品18videos性欧| 日韩网站免费观看| 黄网站色欧美视频| 国产精品第一区| 91精品国产网站| 91精品久久久久久久久青青| 26uuu久久噜噜噜噜| 国内精品一区二区三区| 日韩激情av在线播放| 国产v综合ⅴ日韩v欧美大片| 欧美性jizz18性欧美| 欧美中文字幕在线播放| 欧美成人免费网| 岛国视频午夜一区免费在线观看| 欧美日韩成人免费| 日韩欧美中文字幕在线播放| 久久久综合免费视频| 亚洲女同性videos| 成人免费网站在线观看| 国产精品福利观看| 国产日韩在线看片| 成人国内精品久久久久一区| 精品亚洲一区二区三区在线观看| 亚洲香蕉伊综合在人在线视看| 亚洲欧美制服第一页| 欧美成人免费大片| 在线看欧美日韩| 国产91色在线播放| 欧美日韩在线影院| 国产一区二区丝袜高跟鞋图片| 九九视频这里只有精品| 中文字幕亚洲国产| 97香蕉久久夜色精品国产| 欧美国产日韩二区| 中文字幕亚洲无线码在线一区| 欧美裸身视频免费观看| 国产日韩欧美在线| 亚洲电影免费观看高清完整版在线观看| 97视频网站入口| 亚洲毛片在线观看| 久久久久久久91| 国产一区二区免费| 久久久精品视频成人| 性欧美xxxx交| 亚洲人在线视频| 日韩欧美中文字幕在线观看| 精品亚洲一区二区| 久久成人av网站| 日本亚洲欧洲色α| 中文精品99久久国产香蕉| 久久久久久久久久久国产| 欧洲亚洲免费在线| 亚洲精品在线观看www| 日韩精品免费在线视频| 亚洲天堂第一页| 日韩美女av在线免费观看| 久久精品视频va| 国产日韩欧美黄色| 黑人巨大精品欧美一区二区一视频| 成人福利在线视频| 亚洲欧美在线一区二区| 欧美性videos高清精品| 欧美日韩在线视频一区二区| 不卡av电影在线观看| 国产精品高清在线| 国产欧美精品在线| 岛国av一区二区三区| 中文字幕在线看视频国产欧美| 亚洲最大在线视频| 久久精品中文字幕电影| 国产亚洲精品综合一区91| 欧美电影免费观看高清| 亚洲自拍av在线| 国产精品亚洲视频在线观看| 69久久夜色精品国产69乱青草| 亚洲免费av电影| 亚洲人成电影在线| 欧美日韩国产成人在线观看| 国内精品久久久久| 欧美成人精品在线播放| 国产在线a不卡| 亚洲免费一级电影| 欧美激情女人20p| 精品久久在线播放| 国产欧美精品一区二区三区介绍| 精品国产成人在线| 国产亚洲免费的视频看| 美女av一区二区三区| 亲子乱一区二区三区电影| 国产日韩中文字幕在线| 欧美日韩国产一中文字不卡| 国模私拍视频一区| 欧美成年人在线观看| 亚洲国产精彩中文乱码av在线播放| 国产在线观看精品一区二区三区| 欧美精品一区三区| 久久99精品国产99久久6尤物| 亚洲石原莉奈一区二区在线观看| 国产日本欧美一区二区三区在线| 久久精品国产一区二区三区| 精品久久久久久久久久ntr影视| 少妇久久久久久| 成人国产精品日本在线| 欧美黑人性生活视频| 久久97久久97精品免视看| 欧美亚洲成人网| 日韩在线视频线视频免费网站| 77777少妇光屁股久久一区| 久久久久久久一区二区三区| 亚洲精品国产福利| 国产亚洲欧美日韩美女| 26uuu另类亚洲欧美日本一| 日韩av第一页| 国产欧美精品日韩精品| 久久久在线视频| 欧美成人亚洲成人| 成人深夜直播免费观看| 2018日韩中文字幕| 精品国产一区二区三区四区在线观看| 国产男人精品视频| 亚洲精品久久视频| 91九色视频在线| 深夜精品寂寞黄网站在线观看| 午夜精品久久久久久久99热| 日韩av在线最新| 亚洲人午夜色婷婷| 国产精品久久久久aaaa九色| 国产精品91一区| 亚洲天堂av网| 国产精品狼人色视频一区| 一本大道香蕉久在线播放29| 国产91精品黑色丝袜高跟鞋| 国产精品美乳一区二区免费| 久久久国产精品免费| 欧美性受xxxx黑人猛交| 久久夜色精品国产亚洲aⅴ| 人人爽久久涩噜噜噜网站| 久久91亚洲精品中文字幕| 日本高清不卡的在线| 日韩电影大全免费观看2023年上| 亚洲色图18p| 国产成人在线播放| 日韩亚洲欧美中文在线|