延遲加載目的:javascript
1、用戶友好方面
1.加快頁面展現效率。
2.節省流量(不得不說,圖片請求在wap頁面上是一筆至關大的開銷)。
2、服務器方面
1.減小請求數量,下降服務器的壓力。css
網上不少延遲加載插件,不過這些插件都不能很好的匹配咱們所須要的功能,因此決定本身動手鼓搗一個。
參考:jquery.lazyload.jshtml
看了下jquery.lazyload.js的源碼,對延遲加載的原理有了必定的理解,先肯定下本身產品的需求。java
1.滾動加載(必須的)
2.顯示效果爲漸現,和team保持一致
3.佔位圖片要有
4.須要留有延遲加載對象的接口(大部分數據都是ajax請求加載,須要在請求完成後把對象塞進對象接口)。jquery
插件使用:zepto.jsajax
插件代碼數組
var lazyLoad={ elements:[], scroll:function(){ var $window=$(window); $window.bind('scroll',function(){ if(lazyLoad.elements.length===0){ return; } lazyLoad.elements.each(function(){ var _this=this,$this=$(this); _this.loaded=false; if($window.height()+$window.scrollTop()>$this.offset().top && $window.scrollTop()<$this.offset().top+$this.height()){ var _tagthis=this,$tagthis=$(this); $('<img />').bind('load',function(){ $tagthis.hide(); $tagthis.attr('src',$tagthis.attr('data-original')).fadeIn(500); _tagthis.loaded=true; var temp=$.grep(lazyLoad.elements,function(element){ return !element.loaded; }); lazyLoad.elements=$(temp); }).attr('src',$tagthis.attr('data-original')); }; }); }); } }
JS代碼服務器
$(function(){ lazyLoad.elements=$('img'); lazyLoad.scroll(); setTimeout(function(){ $(window).trigger('scroll');//當前數據都加載成功之後先執行如下滾動事件,初始化如下頁面 }) setTimeout(function(){ for(var i=0;i<4;i++){ var oImg=$('<img />'); oImg.attr({'src':'jinyubin2.jpeg','data-original':'jinyubin1.jpg'}).appendTo('body'); lazyLoad.elements.push(oImg.get(0));//圖片對象放進帶加載對象數組中 }; $(window).trigger('scroll');//當前數據都加載成功之後先執行如下滾動事件,初始化如下頁面 },5000) })
HTML代碼app
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus®"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> <title>Document</title> </head> <body> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="lazyload.js"></script> <style type="text/css"> img{display:block;} </style> <img src="jinyubin2.jpeg" data-original="jinyubin1.jpg" /> <img src="jinyubin2.jpeg" data-original="jinyubin1.jpg" /> <img src="jinyubin2.jpeg" data-original="jinyubin1.jpg" /> <img src="jinyubin2.jpeg" data-original="jinyubin1.jpg" /> <img src="jinyubin2.jpeg" data-original="jinyubin1.jpg" /> <img src="jinyubin2.jpeg" data-original="jinyubin1.jpg" /> </body> </html>