JavaScript实现图片懒加载(Lazyload)


Posted in Javascript onNovember 28, 2016

懒加载的意义(为什么要使用懒加载)

对页面加载速度影响最大的就是图片,一张普通的图片可以达到几M的大小,而代码也许就只有几十KB。当页面图片很多时,页面的加载速度缓慢,几S钟内页面没有加载完成,也许会失去很多的用户。

所以,对于图片过多的页面,为了加速页面加载速度,所以很多时候我们需要将页面内未出现在可视区域内的图片先不做加载, 等到滚动到可视区域后再去加载。这样子对于页面加载性能上会有很大的提升,也提高了用户体验。

原理

将页面中的img标签src指向一张小图片或者src为空,然后定义data-src(这个属性可以自定义命名,我才用data-src)属性指向真实的图片。

<img src="default.jpg" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" />

当载入页面时,先把可视区域内的img标签的data-src属性值负给src,然后监听滚动事件,把用户即将看到的图片加载。这样便实现了懒加载。

代码

在写代码前,需要了解各种高度。先看这篇文章scrollTop,offsetTop,scrollLeft,offsetLeft

<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
img {
display: block;
margin-bottom: 50px;
width: 400px;
height: 400px;
}
</style>
</head>
<body>
<img src="" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
<img src="" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
<img src="" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
<img src="" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
<img src="" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
<img src="" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
<img src="" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
<img src="" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
<img src="" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
<img src="" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
<img src="" data-src="http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg" alt="">
</body>

JavaScript

<script>
var num = document.getElementsByTagName('img').length;
var img = document.getElementsByTagName("img");
var n = 0; //存储图片加载到的位置,避免每次都从第一张图片开始遍历
lazyload(); //页面载入完毕加载可是区域内的图片
window.onscroll = lazyload;
function lazyload() { //监听页面滚动事件
var seeHeight = document.documentElement.clientHeight; //可见区域高度
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; //滚动条距离顶部高度
for (var i = n; i < num; i++) {
if (img[i].offsetTop < seeHeight + scrollTop) {
if (img[i].getAttribute("src") == "") {
img[i].src = img[i].getAttribute("data-src");
}
n = i + 1;
}
}
}
</script>

jQuery

<script>
var n = 0,
imgNum = $("img").length,
img = $('img');
lazyload();
$(window).scroll(lazyload);
function lazyload(event) {
for (var i = n; i < imgNum; i++) {
if (img.eq(i).offset().top < parseInt($(window).height()) + parseInt($(window).scrollTop())) {
if (img.eq(i).attr("src") == "") {
var src = img.eq(i).attr("data-src");
img.eq(i).attr("src", src);
n = i + 1;
}
}
}
}
</script>

如果大家感觉此文介绍的不够详细,大家可以参考下这篇文章:

以上所述是小编给大家介绍的JavaScript实现图片懒加载(Lazyload),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
escape、encodeURI、encodeURIComponent等方法的区别比较
Dec 27 Javascript
javascript 混合的构造函数和原型方式,动态原型方式
Dec 07 Javascript
jQuery CSS()方法改变现有的CSS样式
Aug 20 Javascript
利用jquery操作Radio方法小结
Oct 20 Javascript
Javascript数组与字典用法分析
Dec 13 Javascript
移动端H5开发 Turn.js实现很棒的翻书效果
Jun 20 Javascript
jQuery实现的placeholder效果完整实例
Aug 02 Javascript
echarts3 使用总结(绘制各种图表,地图)
Jan 05 Javascript
jQuery插件FusionCharts实现的2D面积图效果示例【附demo源码下载】
Mar 06 Javascript
Node.js安装配置图文教程
May 10 Javascript
JS获取指定月份的天数两种实现方法
Jun 22 Javascript
Angular2 自定义表单验证器的实现方法
Dec 14 Javascript
最常见的左侧分类菜单栏jQuery实现代码
Nov 28 #Javascript
JS实现页面跳转参数不丢失的方法
Nov 28 #Javascript
String字符串截取的四种方式总结
Nov 28 #Javascript
localStorage实现便签小程序
Nov 28 #Javascript
JavaScript实现邮箱地址自动匹配功能代码
Nov 28 #Javascript
Jquery循环截取字符串的方法(多出的字符串处理成&quot;...&quot;)
Nov 28 #Javascript
基于iscroll.js实现下拉刷新和上拉加载效果
Nov 28 #Javascript
You might like
Apache服务器无法使用的解决方法
2013/05/08 PHP
Yii入门教程之Yii安装及hello world
2014/11/25 PHP
php表单提交实例讲解
2015/11/12 PHP
简单的pgsql pdo php操作类实现代码
2016/08/25 PHP
php实现评论回复删除功能
2017/05/23 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
PHP上传文件及图片到七牛的方法
2018/07/25 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
2019/10/14 PHP
javascript编程起步(第二课)
2007/01/10 Javascript
基于jquery的模态div层弹出效果
2010/08/21 Javascript
JS在IE下缺少标识符的错误
2014/07/23 Javascript
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
2015/08/21 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
2016/06/13 Javascript
JS实现类似51job上的地区选择效果示例
2016/11/17 Javascript
从零学习node.js之文件操作(三)
2017/02/21 Javascript
layui选项卡效果实现代码
2017/05/19 Javascript
vue 刷新之后 嵌套路由不变 重新渲染页面的方法
2018/09/13 Javascript
JS前端模块化原理与实现方法详解
2020/03/17 Javascript
Vue自定义多选组件使用详解
2020/09/08 Javascript
python备份文件的脚本
2008/08/11 Python
python中的内置函数getattr()介绍及示例
2014/07/20 Python
python生成器表达式和列表解析
2016/03/10 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
2018/04/24 Python
python爬虫 模拟登录人人网过程解析
2019/07/31 Python
pytorch 实现在预训练模型的 input上增减通道
2020/01/06 Python
tensorflow指定GPU与动态分配GPU memory设置
2020/02/03 Python
HTML5制作3D爱心动画教程 献给女友浪漫的礼物
2014/11/05 HTML / CSS
Steve Madden官网:美国鞋类品牌
2017/01/29 全球购物
Java面试题及答案
2012/09/08 面试题
英语系本科生个人求职信
2013/09/21 职场文书
优秀应届毕业生自荐信
2013/11/16 职场文书
教师师德反思材料
2014/02/15 职场文书
护士岗前培训自我评鉴
2014/02/28 职场文书
个人四风问题对照检查材料思想汇报
2014/10/06 职场文书
慰问信格式规范
2015/03/23 职场文书
SpringBoot深入分析讲解监听器模式下
2022/07/15 Java/Android