麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

javascript實(shí)現(xiàn)圖片延遲加載方法匯總(三種方法)

2019-11-20 11:40:48
字體:
供稿:網(wǎng)友

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

js實(shí)現(xiàn)圖片延遲加載方法一:

<!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;//用來判斷是否是向下滾動(dòng)(向上滾動(dòng)就不需要判斷延遲加載圖片了)       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;//滾動(dòng)的高度       var bodyHeight = document.body.offsetHeight;//body(頁面)可見區(qū)域的總高度       if(temp < scrollHeight) {//為true表示是向下滾動(dòng),否則是向上滾動(dòng),不需要執(zhí)行動(dòng)作。        for(var k=0; k<lazyImgArr.length; k++) {        var imgTop = lazyImgArr[k].offsetTop;//1305(圖片縱坐標(biāo))        if((imgTop - scrollHeight) <= bodyHeight) {         lazyImgArr[k].src = lazyImgArr[k].alt;         lazyImgArr[k].className = "notlazy"                }       }       temp = scrollHeight;      }     }; // --></script>  </body> </html>

js實(shí)現(xiàn)網(wǎng)頁圖片延時(shí)加載方法二:

再?zèng)]貼代碼之前先給大家講下js實(shí)現(xiàn)圖片延時(shí)加載的原理。

實(shí)現(xiàn)原理:

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

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

然后在頁面加載時(shí),把所有使用了lazy_src的圖片都保存到數(shù)組里,然后在滾動(dòng)時(shí)計(jì)算可視區(qū)域的top,然后把延時(shí)加載的圖片中top小于當(dāng)前可視區(qū)域(即圖片出現(xiàn)在可視區(qū)域內(nèi))的圖片的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 = [];    //從所有相關(guān)元素中找出需要延時(shí)加載的元素     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); //得到圖片相對(duì)document的距上距離       if (map_element[t_index]) {        map_element[t_index].push(i);      } else {        //按距上距離保存一個(gè)隊(duì)列         var t_array = [];        t_array[0] = i;        map_element[t_index] = t_array;        download_count++; //需要延時(shí)加載的圖片數(shù)量       }    }  };  function initDownloadListen() {    if (!download_count) return;    var offset = (window.MessageEvent && !document.getBoxObjectFor) ? doc_body.scrollTop : doc_element.scrollTop;    //可視化區(qū)域的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  }})();

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

另外:

如果你的頁面上存在有內(nèi)容切換的欄目的話,可能在切換時(shí)切換的內(nèi)容里的圖片可能會(huì)不顯示,處理的方法是在內(nèi)容時(shí)單獨(dú)圖片加載處理,如:

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

原生態(tài)js實(shí)現(xiàn)圖片延時(shí)加載方法三:

 <!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>//以上圖片測試時(shí)可用復(fù)制多點(diǎn)<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);            }        }        //這里可以按照需要配置些參數(shù)        var v={            eleGroup:null,            eleTop:null,            eleHeight:null,            screenHeight:null,            visibleHeight:null,            scrollHeight:null,            scrolloverHeight:null,            limitHeight:null        }        //對(duì)數(shù)據(jù)進(jìn)行初始化        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>

以上內(nèi)容通過三種方法介紹了js實(shí)現(xiàn)圖片延時(shí)加載,希望大家喜歡。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 亚州综合一区 | cosplay裸体福利写真 | 亚洲男人的天堂在线视频 | 国产毛片网站 | 欧美成人鲁丝片在线观看 | 久久精品中文字幕 | 精品久久www | 黄网站在线免费 | 免费a级毛片大学生免费观看 | 久色亚洲 | 久久久久一本一区二区青青蜜月 | 免费在线观看成年人视频 | xxxxxx打针视频vk | 一级黄色片在线看 | 亚洲特黄a级毛片在线播放 久久久入口 | 国内成人自拍视频 | 石原莉奈日韩一区二区三区 | 成人毛片网| 久久露脸国语精品国产91 | 久久久久av电影 | 久久久久久久久久久一区 | 国产成年人网站 | 国产毛片在线 | 精品日韩欧美 | 国产亚洲精品美女久久久 | 一区二区久久电影 | 成人毛片100免费观看 | 免费日韩片 | 九九热精彩视频 | 最新av网址在线观看 | 久久精品之 | 羞羞答答影院 | 久久精品一区二区三区国产主播 | 久久亚洲精品国产 | 性感美女一级毛片 | 在线a亚洲视频播放在线观看 | 特片网久久 | 国产韩国精品一区二区三区久久 | 久久精品免费网站 | 999久久久久久 | 国产一区日韩精品 |