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中get和post的简单实例
Feb 04 Javascript
JavaScript事件详细讲解
Jun 27 Javascript
AngularJS过滤器详解及示例代码
Aug 16 Javascript
js选项卡的制作方法
Jan 23 Javascript
jQuery实现文章图片弹出放大效果
Apr 06 jQuery
vue使用xe-utils函数库的具体方法
Mar 06 Javascript
基于vue2.0的活动倒计时组件countdown(附源码下载)
Oct 09 Javascript
在Vue项目中使用snapshot测试的具体使用
Apr 16 Javascript
详解vue中使用protobuf踩坑记
May 07 Javascript
使用webpack/gulp构建TypeScript项目的方法示例
Dec 18 Javascript
javascript实现移动端红包雨页面
Jun 23 Javascript
vue+elementui实现点击table中的单元格触发事件--弹框
Jul 18 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
用PHP实现的四则运算表达式计算实现代码
2011/08/02 PHP
php简单防盗链实现方法
2015/07/29 PHP
Laravel中使用FormRequest进行表单验证方法及问题汇总
2016/06/19 PHP
用JS实现一个页面多个css样式实现
2008/05/29 Javascript
jquery tools 系列 scrollable(2)
2009/09/06 Javascript
picChange 图片切换特效的函数代码
2010/05/06 Javascript
jsPDF生成pdf后在网页展示实例
2014/01/16 Javascript
js判断字符长度及中英文数字等
2014/03/19 Javascript
jQuery选择器querySelector的使用指南
2015/01/23 Javascript
Bootstrap所支持的表单控件实例详解
2016/05/16 Javascript
jQuery简单倒计时效果完整示例
2016/09/20 Javascript
jquery仿京东侧边栏导航效果
2017/03/02 Javascript
浅谈Node.js之异步流控制
2017/10/25 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
jQuery.extend 与 jQuery.fn.extend的用法及区别实例分析
2018/07/25 jQuery
详解Angular模板引用变量及其作用域
2018/11/23 Javascript
vue 返回上一页,页面样式错乱的解决
2019/11/14 Javascript
Node.js API详解之 module模块用法实例分析
2020/05/13 Javascript
Tornado服务器中绑定域名、虚拟主机的方法
2014/08/22 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
2020/02/27 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
2020/03/23 Python
python实现音乐播放和下载小程序功能
2020/04/26 Python
python爬取网易云音乐热歌榜实例代码
2020/08/07 Python
Python 远程开关机的方法
2020/11/18 Python
python爬虫判断招聘信息是否存在的实例代码
2020/11/20 Python
Python基于execjs运行js过程解析
2020/11/27 Python
python 爬取腾讯视频评论的实现步骤
2021/02/18 Python
突袭HTML5之Javascript API扩展2—地理信息服务及地理位置API学习
2013/01/31 HTML / CSS
西部世纪面试题
2014/12/05 面试题
初一地理教学反思
2014/01/16 职场文书
保护环境倡议书100字
2014/05/19 职场文书
党支部群众路线整改措施思想汇报
2014/10/10 职场文书
熟背这些句子,让您的英语口语突飞猛进(135句)
2019/09/06 职场文书
dubbo服务整合zipkin详解
2021/07/26 Java/Android
Python之基础函数案例详解
2021/08/30 Python
MySQL 计算连续登录天数
2022/05/11 MySQL