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 相关文章推荐
基于jQuery的动态表格插件
Mar 28 Javascript
IE6背景图片不缓存问题解决方案及图片使用策略多个方法小结
May 14 Javascript
Jquery图形报表插件 jqplot简介及参数详解
Oct 10 Javascript
JavaScript window.document的属性、方法和事件小结
Oct 24 Javascript
js/jquery解析json和数组格式的方法详解
Jan 09 Javascript
js实现div的切换特效上一个下一个
Feb 11 Javascript
JavaScript将Web页面内容导出到Word及Excel的方法
Feb 13 Javascript
jQuery使用hide方法隐藏元素自身用法实例
Mar 30 Javascript
Bootstrap 3 按钮标签实例代码
Feb 21 Javascript
解决Vue打包之后文件路径出错的问题
Mar 06 Javascript
微信JS-SDK updateAppMessageShareData安卓不能自定义分享详解
Mar 29 Javascript
Vue实现input宽度随文字长度自适应操作
Jul 29 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
关于shopex同步ucenter的redirect问题,导致script不运行
2013/04/10 PHP
分割GBK中文遭遇乱码的解决方法
2013/08/09 PHP
详解在YII2框架中使用UEditor编辑器发布文章
2018/11/02 PHP
Js数组的操作push,pop,shift,unshift等方法详细介绍
2012/12/28 Javascript
判断js对象是否拥有某一个属性的js代码
2013/08/16 Javascript
网页广告中JS代码的信息监听示例
2014/04/02 Javascript
JavaScript常用验证函数实例汇总
2014/11/25 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
fastclick插件导致日期(input[type=&quot;date&quot;])控件无法被触发该如何解决
2015/11/09 Javascript
jQuery实现div拖拽效果实例分析
2016/02/20 Javascript
jquery自适应布局的简单实例
2016/05/28 Javascript
值得分享的bootstrap table实例
2016/09/22 Javascript
原生js实现网易轮播图效果
2020/04/10 Javascript
AngularJS实现页面定时刷新
2017/03/14 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
浅谈Webpack 是如何加载模块的
2018/05/24 Javascript
ndm:NPM的桌面GUI应用程序
2018/10/15 Javascript
微信小程序左滑删除功能开发案例详解
2018/11/12 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
2019/02/27 jQuery
解决layui页面按钮点击无反应,也不报错的问题
2019/09/29 Javascript
jQuery实现的解析本地 XML 文档操作示例
2020/04/30 jQuery
python中定义结构体的方法
2013/03/04 Python
python组合无重复三位数的实例
2018/11/13 Python
redis数据库及与python交互用法简单示例
2019/11/01 Python
python中altair可视化库实例用法
2021/01/26 Python
详解python日志输出使用配置文件格式
2021/02/10 Python
英国版MAC彩妆品牌:Illamasqua
2018/04/18 全球购物
《中华少年》教学反思
2014/02/15 职场文书
《雪儿》教学反思
2014/04/17 职场文书
六查六看自查报告
2014/10/14 职场文书
党的群众路线教育实践活动总结大会主持词
2014/10/30 职场文书
监考失职检讨书
2015/01/26 职场文书
音乐教师个人总结
2015/02/06 职场文书
导游词之任弼时故居
2020/01/07 职场文书
Python Django搭建文件下载服务器的实现
2021/05/10 Python
MySQL8.0无法启动3534的解决方法
2021/06/03 MySQL