如今在作手机移动端的网站,由于是电商类,所以会有各类各样的图片,老大对于这么多图片的加载表示十分不爽,因而在各类探索能够延迟加载图片啊什么的方法,因而jquery.lazyload.js就映入眼帘了。html
github : https://github.com/tuupola/jquery_lazyloadjquery
jquery.lazyload.js 是基于jquery的,这里是从github上面下载下来的demos,分享在度盘了 http://pan.baidu.com/s/1eQkXSNCgit
简单写几个例子:默认的延迟加载、设定区域延迟加载、自定义事件延迟加载等,我以为这样的组合基本上就差很少够用了,更多的功能看看demo研究一下应给问题不大~github
首先固然了,jquery.js和jquery.lazyload.js都得有吧~? 前者在网上找就好,不过笔者学习的时候用的1.4.2 ; 后者直接去网盘分享里面扒就是了~chrome
嗯,多准备一些图片有备无患啊,最好是每行一张的条件下可以多出浏览器可视范围不少,这样貌似能更好的观察效果啊~浏览器
话很少说,直接放代码,这段html代码基本上就不会变了函数
<!DOCTYPE html> <html> <head> <title>lazyload的测试</title> <meta charset="utf-8" /> </head> <body> <div id="pics1"> <img data-original="img/1.jpg" alt="pic1-1" height="200" width="640" /><br /> <img data-original="img/2.jpg" alt="pic1-2" height="200" width="640" /><br /> <img data-original="img/3.jpg" alt="pic1-2" height="200" width="640" /><br /> <img data-original="img/3.png" alt="pic1-3" height="200" width="640" /><br /> <img data-original="img/1.png" alt="pic1-4" height="200" width="640" /><br /> <img data-original="img/2.png" alt="pic1-5" height="200" width="640" /><br /> </div> <div id="pics2"> <img data-original="img/4.jpg" alt="pic2-1" height="200" width="640" /><br /> <img data-original="img/4.png" alt="pic2-1" height="200" width="640" /><br /> <img data-original="img/5.jpg" alt="pic2-2" height="200" width="640" /><br /> <img data-original="img/5.png" alt="pic2-2" height="200" width="640" /><br /> </div> <!-- 这里留着用来写不一样的js代码,之后的代码就放在这里 --> </body> </html>
很明显,img标签中没有咱们熟悉的src属性,取而代之的是 data-original属性,这个属性就是lazyload库用来延迟处理图片文件时所用的属性了,【绿字可不看: 这个data-original属性固然是能够改的,只要改lazyload的源码就行了。。。工具
嗯,html代码打算一共展现10张图片,而且用br换行,为了演示更多的效果,将图片分为了2组,分别用两个div包裹了起来学习
每一个img标签设置了height和width属性,这个对于延迟加载来讲是颇有用的,本身加上跟去掉,尝试一下效果就行了,这里咱们先带着。开发工具
嗯,html就到这里,接下来是对lazyload的各类探索了~
首先须要说的是,貌似这个插件曾经作的是“假延迟”,听说仍然是所有将图片加载完以后再控制前台的显示,不过这个版本不是这个样子,插件到底何时加载了图片,能够用各类浏览器的开发工具查看,例如chrome的network标签
就是说明一种检验的方法,要否则我怎么知道它究竟是不是延迟加载了呢。。。如下开始正式尝试。
嗯,仍然是直接放代码
<script src="jquery-1.4.2.min.js" ></script> <script src="jquery.lazyload.min.js" ></script> <script> $('img').lazyload(); </script>
嗯,这里只是简单的选取了全部img标签,而后调用lazyload方法,因而,你就能够打开chrome的network页面,访问这个页面了,你会发现只请求了页面可见范围左右的图片,并且还有一堆data:image……的请求,这些请求是lazyload插件默认的图片占位符,其实表示的就是一张图片了,有兴趣的话能够该lazyload代码换成本身想要的小图片代码
而后往下拉动浏览器滚动条,你会逐渐发现浏览器在逐个的请求页面下方的图片文件,这就是最简单的默认延迟加载。
<script src="jquery-1.4.2.min.js" ></script> <script src="jquery.lazyload.min.js" ></script> <script> $('img').lazyload({ effect : 'fadeIn' }); </script>
加了一个effect的属性值,其余同上,只是当图片出现的时候会有一个淡入的效果
这大概是一种加速页面显示很容易想到的思路,好比先让用户可见部分加载,再让首先不可见的部分加载,最后再让其余很不重要的地方的图片慢慢加载【绿字可不看: 我以为对于这个问题应该是有更好的处理方式,不过这里就拿lazyload解决了
<script src="jquery-1.4.2.min.js" ></script> <script src="jquery.lazyload.min.js" ></script> <script> $('#pics1 img').lazyload({ effect : 'fadeIn' }); </script>
与前面的区别仅仅是选择器不一样而已,相信看了这个效果你们就会各类选择区域设置不一样的加载场景了。
<script src="jquery-1.4.2.min.js" ></script> <script src="jquery.lazyload.min.js" ></script> <script> $('#pics2 img').lazyload({ effect : 'fadeIn', event : 'waitforcall' }); setTimeout(function(){ $('#pics2 img').trigger('waitforcall'); },5000); </script>
这里在lazyload里加了一个event属性,而这个事件名称彻底是本身起的,而后在接下来的脚本里面使用了一个延迟函数,5s后让pics2这个div中的图片们触发“waitforcall”事件,效果就是5s后让这些图片加载并淡入效果显示。
应该指出的是,既然使用的trigger来触发,那么即便这些图片不在当前可视范围内,也会在5s后加载。
有了这个示例,大概对于如何使用lazyload来处理整个页面图片的加载,加快页面显示速度,你们可能就会有一些想法了