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 相关文章推荐
基于jquery的动态创建表格的插件
Apr 05 Javascript
常用一些Javascript判断函数
Aug 14 Javascript
jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
Mar 05 Javascript
jquery中load方法的用法及注意事项说明
Feb 22 Javascript
$.each与$().each的区别示例介绍
Mar 20 Javascript
jQuery中的pushStack实现原理和应用实例
Feb 03 Javascript
基于JavaScript实现在新的tab页打开url
Aug 04 Javascript
Javascript6中字符串的四个新用法分享
Sep 11 Javascript
JavaScript随机生成颜色的方法
Oct 15 Javascript
Node.js开启Https的实践详解
Oct 25 Javascript
layui select获取自定义属性方法
Aug 15 Javascript
微信小程序中转义字符的处理方法
Mar 28 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
实现了一个PHP5的getter/setter基类的代码
2007/02/25 PHP
PHP+ajax 无刷新删除数据
2010/02/20 PHP
一个简洁的PHP可逆加密函数(分享)
2013/06/06 PHP
php 不使用js实现页面跳转
2014/02/11 PHP
PHP callback函数使用方法和注意事项
2015/01/23 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
2019/03/27 PHP
JavaScript 对象模型 执行模型
2009/12/06 Javascript
使用Json比用string返回数据更友好,也更面向对象一些
2011/09/13 Javascript
分享几个超级震憾的图片特效
2012/01/08 Javascript
js防止表单重复提交的两种方法
2013/09/30 Javascript
jQuery中animate动画第二次点击事件没反应
2015/05/07 Javascript
js命名空间写法示例
2015/12/18 Javascript
Nodejs中session的简单使用及通过session实现身份验证的方法
2016/02/04 NodeJs
Javascript中indexOf()和lastIndexOf应用方法实例
2016/08/24 Javascript
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
2017/05/24 Javascript
Angular2进阶之如何避免Dom误区
2018/04/02 Javascript
解决Layui 表格自适应高度的问题
2019/11/15 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
2020/10/29 Javascript
[00:02]DOTA2新版本使用PA至宝后暴击展示
2014/11/19 DOTA
python构建深度神经网络(续)
2018/03/10 Python
Python连接Mssql基础教程之Python库pymssql
2018/09/16 Python
CSS3使用transition属性实现过渡效果
2018/04/18 HTML / CSS
基于Canvas+Vue的弹幕组件的实现
2019/07/23 HTML / CSS
英国在线房屋中介网站:Yopa
2018/01/09 全球购物
康拓普公司Java笔面试
2016/09/23 面试题
装饰活动策划方案
2014/02/11 职场文书
《美丽的南沙群岛》教学反思
2014/04/27 职场文书
学习党的群众路线对照检查材料
2014/09/29 职场文书
2014年银行员工工作总结
2014/11/12 职场文书
放假通知
2015/04/14 职场文书
证劵公司反洗钱宣传活动总结
2015/05/08 职场文书
2016年八一建军节活动总结
2016/04/05 职场文书
Python List remove()实例用法详解
2021/08/02 Python
手把手教你导入Go语言第三方库
2021/08/04 Golang
SpringBoot项目部署到阿里云服务器的实现步骤
2022/06/28 Java/Android