详解jQuery lazyload 懒加载


Posted in Javascript onDecember 19, 2016

Lazy Load 是一个用 JavaScript 编写的 jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预加载的处理方式正好是相反的.

在包含很多大图片长页面中延迟加载图片可以加快页面加载速度. 浏览器将会在加载可见图片之后即进入就绪状态. 在某些情况下还可以帮助降低服务器负担.

           Demo页面:

           基本选项

           淡入效果

           对不支持JavaScript浏览器的降级处理

           水平滚动

           容器内水平滚动

           容器内垂直滚动

           页面内存在N多图片

           经过五秒钟的延迟后加载图片

           用AJAX来加载图片

如何使用

Lazy Load 依赖于 jQuery. 请将下列代码加入HTML的结尾,也就是</body>前:

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

你必须改变图片的标签。图像的地址必须放在data-original属性上。给懒加载图像一个特定的class(例如:lazy)。这样你可以很容易地进行图像插件捆绑。代码如下:

<img class="lazy" alt="" width="640" height="480" data-original="img/example.jpg" />
$(function() {
 $("img.lazy").lazyload();
});

这将使所有 class 为 lazy 的图片将被延迟加载.

Demo:基本选项

TIPS:这里必须设置图片的width和height,否则插件可能无法正常工作。

设置临界点

默认情况下图片会出现在屏幕时加载. 如果你想提前加载图片, 可以设置threshold 选项, 设置 threshold 为 200 令图片在距离屏幕 200 像素时提前加载.

$("img.lazy").lazyload({
 threshold : 200
});

设置事件来触发加载

你可以使用jQuery事件,例如click和mouseover。也可以使用自定义事件,如sporty、foobar默认情况下是要等到用户向下滚动并且图像出现在视口中时。只有当用户点击它们才加载图片:

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

Demo:经过五秒钟的延迟后加载图片

使用特效

默认情况下,插件等待图像完全加载并调用show()。你可以使用任何你想要的效果。下面的代码使用fadeIn (淡入效果)。

Demo:淡入效果

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

针对不启用JavaScript的情况

几乎所有浏览器的 JavaScript 都是激活的. 然而可能你仍希望能在不支持 JavaScript 的客户端展示真实图片. 当浏览器不支持 JavaScript 时优雅降级, 你可以将真实的图片片段在写 <noscript> 标签内.

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

可以通过 CSS 隐藏占位符.

.lazy {
 display: none;
}

在支持 JavaScript 的浏览器中, 你必须在 DOM ready 时将占位符显示出来, 这可以在插件初始化的同时完成.

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

图片在容器里面

你可以将插件用在可滚动容器的图片上, 例如带滚动条的 DIV 元素. 你要做的只是将容器定义为 jQuery 对象并作为参数传到初始化方法里面.

Demo:容器内水平滚动, 容器内垂直滚动

当图像不连续时

滚动页面的时候, Lazy Load 会循环为加载的图片. 在循环中检测图片是否在可视区域内. 默认情况下在找到第一张不在可见区域的图片时停止循环. 图片被认为是流式分布的, 图片在页面中的次序和 HTML 代码中次序相同. 但是在一些布局中, 这样的假设是不成立的. 不过你可以通过 failurelimit 选项来控制加载行为.

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

将 failurelimit 设为 10 ,令插件找到 10 个不在可见区域的图片时才停止搜索. 如果你有一个猥琐的布局, 请把这个参数设高一点.

加载隐藏的图片

可能在你的页面上埋藏可很多隐藏的图片. 比如插件用在对列表的筛选, 你可以不断地修改列表中各条目的显示状态. 为了提升性能, Lazy Load 默认忽略了隐藏图片. 如果你想要加载隐藏图片, 请将 skip_invisible 设为 false

$("img.lazy").lazyload({ 
 skip_invisible : false
});

下载插件

最新版本 源代码和压缩代码. 插件已经在 OSX 的 Safari 5.1, Safari 6, Chrome 20, Firefox 12 浏览器上, Windows 的 Chrome 20, IE 8 and IE 9 浏览器上, 以及 iOS5 (iPhone 和 iPad) 的 Safari 5.1 浏览器上测试过.

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
在IE中调用javascript打开Excel的代码(downmoon原作)
Apr 02 Javascript
js操作二级联动实现代码
Jul 27 Javascript
Jquery中val()表单取值赋值的实例代码
Aug 15 Javascript
JavaScript获取IP获取的是IPV6 如何校验
Jun 12 Javascript
vuejs动态组件给子组件传递数据的方法详解
Sep 09 Javascript
Node.js中多进程模块Cluster的介绍与使用
May 27 Javascript
详解vue-loader在项目中是如何配置的
Jun 04 Javascript
利用Node.js批量抓取高清妹子图片实例教程
Aug 02 Javascript
微信小程序出现wx.getLocation再次授权问题的解决方法分析
Jan 16 Javascript
详解单页面路由工程使用微信分享及二次分享解决方案
Feb 22 Javascript
从理论角度讨论JavaScript闭包
Apr 03 Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
Oct 23 Javascript
JS实现滑动门效果的方法详解
Dec 19 #Javascript
jQuery纵向导航菜单效果实现方法
Dec 19 #Javascript
简单理解js的冒泡排序
Dec 19 #Javascript
JS瀑布流实现方法实例分析
Dec 19 #Javascript
移动端日期插件Mobiscroll.js使用详解
Dec 19 #Javascript
JavaScript闭包和范围实例详解
Dec 19 #Javascript
JS前端笔试题分析
Dec 19 #Javascript
You might like
《破坏领主》销量已超100万 未来将继续开发新内容
2020/03/08 其他游戏
10条PHP高级技巧[修正版]
2011/08/02 PHP
关于PHP堆栈与列队的学习
2013/06/21 PHP
Codeigniter中集成smarty和adodb的方法
2016/03/04 PHP
php nginx 实时输出的简单实现方法
2018/01/21 PHP
php数组遍历类与用法示例
2019/05/24 PHP
PhpStorm 2020.3:新增开箱即用的PHP 8属性(推荐)
2020/10/30 PHP
网页里控制图片大小的相关代码
2006/06/25 Javascript
自制基于jQuery的智能提示插件一枚
2011/02/18 Javascript
jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例
2013/06/14 Javascript
JavaScript避免代码的重复执行经验技巧分享
2014/04/17 Javascript
javascript移动设备Web开发中对touch事件的封装实例
2014/06/05 Javascript
用javascript对一个json数组深度赋值示例
2014/07/27 Javascript
原生javascript实现DIV拖拽并计算重复面积
2015/01/02 Javascript
详解JavaScript中的forEach()方法的使用
2015/06/08 Javascript
js经验分享 JavaScript反调试技巧
2018/03/10 Javascript
通过javascript实现扫雷游戏代码实例
2020/02/09 Javascript
JavaScript设计模式之策略模式实现原理详解
2020/05/29 Javascript
vue pages 多入口项目 + chainWebpack 全局引用缩写说明
2020/09/21 Javascript
react的hooks的用法详解
2020/10/12 Javascript
学习 Vue.js 遇到的那些坑
2021/02/02 Vue.js
javascript实现固定侧边栏
2021/02/09 Javascript
Tensorflow 合并通道及加载子模型的方法
2018/07/26 Python
浅谈python图片处理Image和skimage的区别
2019/08/04 Python
Python列表元素常见操作简单示例
2019/10/25 Python
JAVA及PYTHON质数计算代码对比解析
2020/06/10 Python
Canon佳能美国官方商店:购买数码相机、数码单反相机、镜头和打印机
2016/11/15 全球购物
Coggles美国/加拿大:高级国际时装零售商
2018/10/23 全球购物
C语言开发工程师测试题
2016/12/20 面试题
创业培训计划书
2014/05/03 职场文书
初中信息技术教学计划
2015/01/22 职场文书
《鲸》教学反思
2016/02/23 职场文书
小学生节约用水倡议书
2019/08/12 职场文书
Python基础之数据结构详解
2021/04/28 Python
Python实现byte转integer
2021/06/03 Python
Oracle中update和select 关联操作
2022/01/18 Oracle