Lazy Load 是一个用 JavaScript 编写的 jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预加载的处理方式正好是相反的.
在包含很多大图片长页面中延迟加载图片可以加快页面加载速度. 浏览器将会在加载可见图片之后即进入就绪状态. 在某些情况下还可以帮助降低服务器负担.
Demo页面:
如何使用
Lazy Load 依赖于 jQuery. 请将下列代码加入HTML的结尾,也就是</body>前:
[html]<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.lazyload.js"></script>
[/html]
你必须改变图片的标签。图像的地址必须放在data-original属性上。给懒加载图像一个特定的class(例如:lazy)。这样你可以很容易地进行图像插件捆绑。代码如下:
[html]<img class="lazy" alt="" width="640" height="480" data-original="img/example.jpg" />
[/html]
[js]$(function() {
$("img.lazy").lazyload();
});
[/js]
这将使所有 class 为 lazy 的图片将被延迟加载.
Demo:基本选项
TIPS:这里必须设置图片的width和height,否则插件可能无法正常工作。
设置临界点
默认情况下图片会出现在屏幕时加载. 如果你想提前加载图片, 可以设置threshold 选项, 设置 threshold 为 200 令图片在距离屏幕 200 像素时提前加载.
[js]$("img.lazy").lazyload({
threshold : 200
});
[/js]
设置事件来触发加载
你可以使用jQuery事件,例如click和mouseover。也可以使用自定义事件,如sporty、foobar默认情况下是要等到用户向下滚动并且图像出现在视口中时。只有当用户点击它们才加载图片:
[js]$("img.lazy").lazyload({
event : "click"
});
[/js]
Demo:经过五秒钟的延迟后加载图片
使用特效
默认情况下,插件等待图像完全加载并调用show()。你可以使用任何你想要的效果。下面的代码使用fadeIn (淡入效果)。
Demo:淡入效果
[js]$("img.lazy").lazyload({
effect : "fadeIn"
});
[/js]
针对不启用JavaScript的情况
几乎所有浏览器的 JavaScript 都是激活的. 然而可能你仍希望能在不支持 JavaScript 的客户端展示真实图片. 当浏览器不支持 JavaScript 时优雅降级, 你可以将真实的图片片段在写 <noscript> 标签内.
[html]<img class="lazy" data-original="img/example.jpg" width="640" heigh="480">
<noscript><img src="img/example.jpg" width="640" heigh="480"></noscript>
[/html]
可以通过 CSS 隐藏占位符.
[css].lazy {
display: none;
}
[/css]
在支持 JavaScript 的浏览器中, 你必须在 DOM ready 时将占位符显示出来, 这可以在插件初始化的同时完成.
[js]$("img.lazy").show().lazyload();
[/js]
图片在容器里面
你可以将插件用在可滚动容器的图片上, 例如带滚动条的 DIV 元素. 你要做的只是将容器定义为 jQuery 对象并作为参数传到初始化方法里面.
Demo:容器内水平滚动, 容器内垂直滚动
当图像不连续时
滚动页面的时候, Lazy Load 会循环为加载的图片. 在循环中检测图片是否在可视区域内. 默认情况下在找到第一张不在可见区域的图片时停止循环. 图片被认为是流式分布的, 图片在页面中的次序和 HTML 代码中次序相同. 但是在一些布局中, 这样的假设是不成立的. 不过你可以通过 failurelimit 选项来控制加载行为.
[js]$("img.lazy").lazyload({
failure_limit : 10
});
[/js]
将 failurelimit 设为 10 ,令插件找到 10 个不在可见区域的图片时才停止搜索. 如果你有一个猥琐的布局, 请把这个参数设高一点.
加载隐藏的图片
可能在你的页面上埋藏可很多隐藏的图片. 比如插件用在对列表的筛选, 你可以不断地修改列表中各条目的显示状态. 为了提升性能, Lazy Load 默认忽略了隐藏图片. 如果你想要加载隐藏图片, 请将 skip_invisible 设为 false
[js]$("img.lazy").lazyload({
skip_invisible : false
});
[/js]
下载插件
最新版本 源代码和压缩代码. 插件已经在 OSX 的 Safari 5.1, Safari 6, Chrome 20, Firefox 12 浏览器上, Windows 的 Chrome 20, IE 8 and IE 9 浏览器上, 以及 iOS5 (iPhone 和 iPad) 的 Safari 5.1 浏览器上测试过.
Web前端(W3Cways.com) - Web前端学习之路
楼主,在本地使用时没问题,但是扔到服务器上,页面第一次进入的时候依然是加载全部图片,而不是拉到可视区域才加载,第二次进入就正常了,不过那是加载缓存中的图片,也就是说,这个懒加载无效,没有按需加载
可能你的JS加载顺序有问题
不支持轮播图片的懒加载 怎么办 ??
这个没试过,得看你图片轮播想要出现的位置,理论上应该是可行的,可以参照DEMO给图片轮播的图设置class=”lazy”试下
我试了 但是只有第一张可以出现懒加载的效果 但切换到第二张的时候 只有发生滚动事件 才会加载 这明显不是我们所需要的
那你可以在图片轮播的点击切换事件里面加上
$("img.lazy").lazyload();也就是每切换一次图片,重新懒加载一下图片
请问下 使用scrollstop事件 不执行懒加载 是怎么回事
怎么我评论显示不出来
我是代码小白,还想请教一个问题,你说的插件是什么,我测试感觉只需要引用这两个js就行了呀,还需要什么配置吗?
谢谢分享,这个很好用,本人是个代码小白,想请教下JQUERY库一定要加入HTML的结尾吗?因为页面不可能只有一个js效果,然而很多效果都需要先引用JQUERY库(即在头部就要先加载),我测试了一下,感觉在这个懒加载在头部引用似乎也可以呀
这是一种规范,DOM先加载完,再引入JS对DOM进行操作
可以请教问题么
急求 为什么我用了这个插件 当前屏幕的图片有的显示 有的图片要等到页面往下拉一定距离才显示
你用第一个DEMO试下
请问楼主:我用的是点击那个,但是好像图片还是在html里面看得见,其他显示的是display:none;,那还是点击才加载了吗?
哪个
$(“img.lazy”).lazyload({ event : “click”});就是这个,图片就直接全部加载出来了
文章里“设置事件来触发”,对应的DEMO里不是写的CLICK事件,$(“img.lazy”).lazyload({ event: “sporty” });你可以参照DEMO自己写个例子,修改JS为$(“img.lazy”).lazyload({ event : “click”});这样就是点击后显示图片
如果必须填写图片宽高,那么手机端响应式如何处理
JS获取屏幕宽度,然后高度设置宽度的百分之多少
在哪下载?
怎么下载插件啊?我怎么找不到下载的地方啊?抓狂
文章最下方写的很清楚
加载一条一条的数据,可以设置临界点吗?
可以
很好,谢谢博主,收录入笔记了
为什么我的项目中没有执行js方法呢?还需要有什么配置吗
看下你的JQUERY有没有引入正确
很方便,用着也很爽
很好的插件,不过我不懂js 按照讲解使用,发现可视区的图片只加载第一张,剩下的图片只有下拉滚动条才会开始加载,能否自动加载可视区图片呢
设置临界点默认情况下图片会出现在屏幕时加载. 如果你想提前加载图片, 可以设置threshold 选项, 设置 threshold 为 200 令图片在距离屏幕 200 像素时提前加载.$(“img.lazy”).lazyload({ threshold : 200});参考这个就可以了