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 01 Javascript
JavaScript如何实现在文本框(密码框)输入提示语
Dec 25 Javascript
延时加载JavaScript代码提高速度
Dec 27 Javascript
基于jQuery实现音乐播放试听列表
Apr 14 Javascript
点击按钮出现60秒倒计时的简单js代码(推荐)
Jun 07 Javascript
jQuery利用sort对DOM元素进行排序操作
Nov 07 Javascript
移动端触屏幻灯片图片切换插件idangerous swiper.js
Apr 10 Javascript
JS实现移动端按首字母检索城市列表附源码下载
Jul 05 Javascript
vue计算属性和监听器实例解析
May 10 Javascript
详解vue-cli 2.0配置文件(小结)
Jan 14 Javascript
laydate只显示时分 不显示秒的功能实现方法
Sep 28 Javascript
JS数组及对象遍历方法代码汇总
Jun 16 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实现读取和编写XML DOM代码
2010/04/07 PHP
PHP编译安装时常见错误解决办法
2015/05/28 PHP
smarty中常用方法实例总结
2015/08/07 PHP
PHP的PDO连接讲解
2019/01/24 PHP
laravel执行php artisan migrate报错的解决方法
2019/10/09 PHP
js可突破windows弹退效果代码
2008/08/09 Javascript
js函数setTimeout延迟执行的简单介绍
2013/07/17 Javascript
javascript获取url上某个参数的方法
2013/11/08 Javascript
完美解决IE低版本不支持call与apply的问题
2013/12/05 Javascript
跟我学Nodejs(二)--- Node.js事件模块
2014/05/21 NodeJs
jQuery中width()方法用法实例
2014/12/24 Javascript
js中判断变量类型函数typeof的用法总结
2016/08/09 Javascript
JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求问题
2017/10/15 Javascript
微信小程序自定义tab实现多层tab嵌套功能
2018/06/15 Javascript
Vue.js实现可编辑的表格
2019/12/11 Javascript
node.JS二进制操作模块buffer对象使用方法详解
2020/02/06 Javascript
el-form 多层级表单的实现示例
2020/09/10 Javascript
python使用urllib2提交http post请求的方法
2015/05/26 Python
windows系统下Python环境搭建教程
2017/03/28 Python
使用Python操作FTP实现上传和下载的方法
2019/04/01 Python
PyQt5图形界面播放音乐的实例
2019/06/17 Python
Python request中文乱码问题解决方案
2020/09/17 Python
CSS3下的渐变文字效果实现示例
2018/03/02 HTML / CSS
MIXIT官网:俄罗斯最大的化妆品公司之一
2020/01/25 全球购物
SCHIESSER荷兰官方网站:德国内衣专家
2020/10/09 全球购物
Java工程师面试集锦之Spring框架
2013/06/16 面试题
银行实习生自我鉴定范文
2013/09/19 职场文书
大学校园生活自我鉴定
2014/01/13 职场文书
事业单位人员的自我评价范文
2014/09/21 职场文书
领导班子作风建设剖析材料
2014/10/11 职场文书
自查自纠工作总结
2014/10/15 职场文书
2014年公务员个人工作总结
2014/11/22 职场文书
2015年社区统计工作总结
2015/04/21 职场文书
干货:企业内部人才推荐奖励方案!
2019/07/09 职场文书
《三国志》赏析
2019/08/27 职场文书
PO模式在selenium自动化测试框架的优势
2022/03/20 Python