Lazy Load 延迟加载图片的jQuery插件中文使用文档


Posted in Javascript onOctober 18, 2012

什么是LazyLoad技术?

在页面上图片比较多的时候,打开一张页面必然引起与服务器大数据量的交互。尤其是对于高清晰的图片,占了几百K的空间。Lazy Load 是一个用 JavaScript 编写的 jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预加载的处理方式正好是相反的。
在包含很多大图片长页面中延迟加载图片可以加快页面加载速度. 浏览器将会在加载可见图片之后即进入就绪状态. 在某些情况下还可以帮助降低服务器负担,这样势必会引起速度上质的提升。
兼容:ie6/7/8, firefox 3.5.5, opera 10.10, safari 4.0.4, chrome 3.0其中safari和chrome部分功能不支持。

Lazy Load 灵感来自 Matt Mlinac 制作的 YUI ImageLoader 工具箱. 这是演示页面。

原文的链接在:http://www.appelsiini.net/projects/lazyload

现在Lazy Load的版本已经是1.8.1

下载地址: https://3water.com/jiaoben/63757.html

实例下载:

下载声明:
1. 注:此代码仅供学习交流,请勿用于商业用途。
2. 注:此代码仅供学习交流,请勿用于商业用途。
文件信息: 文件名: Lazy Load延迟加载图片实例
文件Hash:dd3e435124e377c2da33344d442f85d1
文件大小:1.1 MB
文件上传日期:2012 年 3 月 25 日
文件更新日期:2012 年 3 月 25 日
文件描述:在页面上图片比较多的时候,打开一张页面必然引起与服务器大数据量的交互。尤其是对于高清晰的图片,占了几百K的空间。Lazy Load 是一个用 JavaScript 编写的 jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预加载的处理方式正好是相反的。

怎样使用? 下面进入正题.

Lazy Load 依赖于 jQuery. 请将下列代码加入页面 head 区域:

<script src="jquery.js" type="text/javascript"></script> 
<script src="jquery.lazyload.js" type="text/javascript"></script>

Lazy Load的使用方法十分简单,但新版做了一些调整,必须修改<img>标签的属性。把<img>标签中的 src 属性改为等待图片的URL, data-original 属性填上真正的图片URL.
如下:

<img class="lazy" src="img/grey.gif" data-original="img/example.jpg" width="640" heigh="480">

建议:src中的等待图片,最好使用1像素的单色图片。
JS代码如下:
$("img.lazy").lazyload();

这样就能实现Lazy Load的效果了. Demo

看完Demo后,是不是觉得没什么效果出现?这个问题会在后面提到.

其实,并非一定要使用它规定的 data-original 属性来存放图片URL.你也可以自己定制别的属性名,如下:
<img class="lazy" src="img/grey.gif" data-attr="img/example.jpg" width="640" heigh="480">
JS代码如下:

$("img.lazy").lazyload({ data_attribute : "attr" });

只需设置 data_attribute 属性为对应的名称即可. (注意:html代码大小写不敏感!所以 "data-" 后面只能跟小写字母或数字.)

对于不支持JavaScript的浏览器,应该有相应的降级处理.

可以使用<noscript>标签,是用来定义在脚本未被执行时的替代内容/文本.而且这样做还有一个好处,因为搜索引擎的爬虫是不处理JavaScript脚本的,所以能直接抓到<noscript>标签中的内容.

<img class="lazy" src="img/grey.gif" data-original="img/example.jpg" width="640" heigh="480"> 
<noscript><img src="img/example.jpg" width="640" heigh="480"></noscript>

CSS样式设置:

.lazy { 
display: none; 
}

JS代码:

$("img.lazy").show().lazyload();

设置图片加载的反应距离
Lazy Load插件默认的设置是:图片在浏览器窗口上出现,就会触发加载.但通过设置 threshold 属性的值,可以调整图片的预先加载位置/距离.
$("img.lazy").lazyload({ threshold : 200 });

另外, threshold 可以为正数或者负数.正数是预先加载, 假设数值为200, 则图片距离出现到屏幕还有 200px 时,就开始加载.如果是负数,则相反.假设数值为-200时,则图片已经在窗口出现,并且距离浏览器视窗底部的距离为 200px 时,才开始加载.
PS:图片和屏幕的距离是根据图片的 top 位置计算.
注意:threshold的设置需要考虑网站的长度和图片的高度,如果数值过大则会导致无法加载的问题.建议数值设置不要超过相应图片高度的一半.

通过事件触发加载
可以通过jQuery定义的事件来触发加载,也可以使用自己定义的事件.

$("img.lazy").lazyload({ 
event : "click" 
});

实现动画效果
上面的Demo之所以会没有图片加载的效果,是因为Lazy Load默认的图片加载是通过 jQuery 的show()方法来显示,所以图片出现几乎是一瞬间.当然我们还可以实现其他效果.
$("img.lazy").lazyload({ 
effect : "fadeIn" 
});

另外还可以使用 slideDown() 方法,但效果不佳.

如果想要控制动画的速度,还可以修改 effectspeed 属性.

$("img.lazy").lazyload({ 
effect : "fadeIn", 
effectspeed : 1000 
});

effectspeed 属性默认是空的,所以如果不设置它,动画的时间为400毫秒.
Container容器属性
当要延迟加载的图片全摆在一个容器中.只需把 container 属性指向摆放 img 的容器的对象.
css代码:
#container { 
height: 600px; 
overflow: scroll; 
}

js代码:
$("img.lazy").lazyload({ 
container: $("#container") 
});

废话不多说,直接看Demo ,不单竖着的可以, 横着也行Demo .

failure_limit的属性
Lazy Load 有一个循环查找 img 的机制.根据 HTML 文档的布局从上往下查找,当找到第一个并未显示/加载的 img 时,就会停止往下查找.(其实就是对 $("img.lazy") 这个对象(组)进行顺序查找)

那这个 failure_limit 的属性有什么用呢?

现在网站设计时,都会用到大量的定位样式,如: float 和 position , 这样在浏览器呈现的布局效果和 HTML 文档中的 DOM 顺序有很大差异.
这样就会存在一种情况,某 <img> 标签已出现在屏幕上,但它却无法显示!! 因为它在 HTML 文档中的实际位置排在了那些还没有显示的 <img> 标签后面, 这样会导致显示在屏幕上的这个 <img> 标签无法加载相应的图片.当Lazy Load 在找到第一个未显示的 <img> 标签时,查找已经被终止了, 并没有继续往下遍历.

所以这个时候,就可以使用failure_limit属性.

$("img.lazy").lazyload({ 
failure_limit : 10 
});

这样 Lazy Load 会查找到第10个未显示的<img>标签处.当在图片多且布局复杂的页面时, failure_limit 的作用就很大了.
原文还温馨提示:If you have a funky layout set this number to something high. 如果你的网站布局很"变态",建议把该值调得更高.

延迟下载图片
可以通过自定义事件,然后通过 setTimeout 来设置延迟触发该事件.

$(function() { 
$("img:below-the-fold").lazyload({ 
event : "sporty" 
}); 
}); $(window).bind("load", function() { 
var timeout = setTimeout(function() {$("img.lazy").trigger("sporty")},5000); 
});

主要原理是,当 event 被设置为 scroll 以外的事件时, 实际上都会绑定了一个内置的 "appear" 事件.顾名思义, 这个事件就是用来显示图片的. (其实 scroll 也是调用这个事件)

skip_invisible 加载不可见的图片
Lazy Load 插件默认对隐藏的图片不加载(例如 display:none ). 这样做有助于性能的优化.如果希望连隐藏的图片一起加载,则可以把 skip_invisible 设为 false .

$("img.lazy").lazyload({ 
skip_invisible : false 
});
Javascript 相关文章推荐
关于JS中的闭包浅谈
Aug 23 Javascript
解决node-webkit 不支持html5播放mp4视频的方法
Mar 11 Javascript
JS实现表单中checkbox对勾选中增加边框显示效果
Aug 21 Javascript
Jquery判断form表单数据是否变化
Mar 30 Javascript
Web Uploader文件上传插件使用详解
May 10 Javascript
JavaScript判断用户名和密码不能为空的实现代码
May 16 Javascript
浅谈JavaScript 覆盖原型以及更改原型
Aug 31 Javascript
Vue.directive()的用法和实例详解
Mar 04 Javascript
vue-cli中vue本地实现跨域调试接口
Jan 16 Javascript
使用 vue 实例更好的监听事件及vue实例的方法
Apr 22 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
May 18 Javascript
文章或博客自动生成章节目录索引(支持三级)的实现代码
May 10 Javascript
JavaScript 用cloneNode方法克隆节点的代码
Oct 15 #Javascript
基于JQuery的模拟苹果桌面Dock效果(稳定版)
Oct 15 #Javascript
基于JQuery模仿苹果桌面的Dock效果(初级版)
Oct 15 #Javascript
JS自动缩小超出大小的图片
Oct 12 #Javascript
文本框input聚焦失焦样式实现代码
Oct 12 #Javascript
poshytip 基于jquery的 插件 主要用于显示微博人的图像和鼠标提示等
Oct 12 #Javascript
innerHTML与jquery里的html()区别介绍
Oct 12 #Javascript
You might like
用PHP解决的一个栈的面试题
2014/07/02 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
2019/09/11 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
2020/01/23 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
javascript 用原型继承来实现对象系统
2010/03/22 Javascript
js操作checkbox遇到的问题解决
2013/06/29 Javascript
解决JQeury显示内容没有边距内容紧挨着浏览器边线
2013/12/20 Javascript
css3元素简单的闪烁效果实现(html5 jquery)
2013/12/28 Javascript
js面向对象编程之如何实现方法重载
2014/07/02 Javascript
原生javascript实现DIV拖拽并计算重复面积
2015/01/02 Javascript
javascript属性访问表达式用法分析
2015/04/25 Javascript
jquery+ajax+text文本框实现智能提示完整实例
2016/07/09 Javascript
AngularJS入门教程之服务(Service)
2016/07/27 Javascript
EsLint入门学习教程
2017/02/17 Javascript
Node.js查找当前目录下文件夹实例代码
2017/03/07 Javascript
JS数组操作之增删改查的简单实现
2017/08/21 Javascript
解决Vue axios post请求,后台获取不到数据的问题方法
2018/08/11 Javascript
原生JS实现的简单小钟表功能示例
2018/08/30 Javascript
html2canvas属性和使用方法以及如何使用html2canvas将HTML内容写入Canvas生成图片
2020/01/12 Javascript
[01:18:35]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS BO3 第一场 1月29日
2021/03/11 DOTA
Python 闭包的使用方法
2017/09/07 Python
libreoffice python 操作word及excel文档的方法
2019/07/04 Python
python修改字典键(key)的方法
2019/08/05 Python
通过 Python 和 OpenCV 实现目标数量监控
2020/01/05 Python
Python调用shell命令常用方法(4种)
2020/05/11 Python
移动Web—CSS为Retina屏幕替换更高质量的图片
2012/12/24 HTML / CSS
土耳其家居建材网站:Koçtaş
2016/11/22 全球购物
写出一个方法实现冒泡排序
2016/07/08 面试题
HR喜欢的自荐信格式
2013/10/08 职场文书
创业计划书的内容步骤和要领
2014/01/04 职场文书
2014年上半年工作自我评价
2014/01/18 职场文书
优秀体育委员自荐书
2014/01/31 职场文书
建筑工地质量标语
2014/06/12 职场文书
2014年作风建设工作总结
2014/10/29 职场文书
2014年安全员工作总结
2014/11/13 职场文书
Redis字典实现、Hash键冲突及渐进式rehash详解
2021/09/04 Redis