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 相关文章推荐
常用的javascript function代码
May 23 Javascript
读jQuery之十四 (触发事件核心方法)
Aug 23 Javascript
JQuery中操作Css样式的方法
Feb 12 Javascript
JQuery实现动态表格点击按钮表格增加一行
Aug 24 Javascript
javascript 兼容各个浏览器的事件
Feb 04 Javascript
JavaScript自学笔记(必看篇)
Jun 23 Javascript
基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息
Aug 29 Javascript
JS封装的选项卡TAB切换效果示例
Sep 20 Javascript
JavaScript实现提交模式窗口后刷新父窗口数据的方法
Jun 16 Javascript
微信小程序实现倒计时补零功能
Jul 09 Javascript
vue使用i18n实现国际化的方法详解
Sep 05 Javascript
jquery实现商品sku多属性选择功能(商品详情页)
Dec 20 jQuery
最常见的左侧分类菜单栏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
新浪微博OAuth认证和储存的主要过程详解
2015/03/27 PHP
PHP+MySQL实现的简单投票系统实例
2016/02/24 PHP
php处理带有中文URL的方法
2016/07/11 PHP
Thinkphp整合阿里云OSS图片上传实例代码
2019/04/28 PHP
PHP图像处理 imagestring添加图片水印与文字水印操作示例
2020/02/06 PHP
提高网站信任度的技巧
2008/10/17 Javascript
基于jquery的超简单上下翻
2010/04/20 Javascript
封装的原生javascript弹出层代码
2010/09/24 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
2013/06/05 Javascript
jQuery菜单插件用法实例
2015/07/25 Javascript
jquery实现漂亮的二级下拉菜单代码
2015/08/26 Javascript
jquery动态导航插件dynamicNav用法实例分析
2015/09/06 Javascript
js实现搜索框关键字智能匹配代码
2020/03/26 Javascript
基于Bootstrap的Java开发问题汇总(Spring MVC)
2017/01/15 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
微信小程序教程系列之新建页面(4)
2017/04/17 Javascript
socket.io学习教程之基本应用(二)
2017/04/29 Javascript
关于javascript作用域的常见面试题分享
2017/06/18 Javascript
Vue中的slot使用插槽分发内容的方法
2018/03/01 Javascript
JavaScript执行环境及作用域链实例分析
2018/08/01 Javascript
js实现随机8位验证码
2020/07/24 Javascript
js对象简介与基本用法示例
2020/03/13 Javascript
原生js+canvas实现验证码
2020/11/29 Javascript
用Python计算三角函数之atan()方法的使用
2015/05/15 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
2018/04/08 Python
Python Pandas找到缺失值的位置方法
2018/04/12 Python
如何优雅地处理Django中的favicon.ico图标详解
2018/07/05 Python
python Shapely使用指南详解
2020/02/18 Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
2020/04/27 Python
matplotlib 多个图像共用一个colorbar的实现示例
2020/09/10 Python
什么是岗位职责
2013/11/12 职场文书
医校毕业生自我鉴定
2014/01/25 职场文书
消防工作实施方案
2014/06/09 职场文书
卫生厅领导班子党的群众路线教育实践活动整改措施
2014/09/20 职场文书
个人查摆问题及整改措施
2014/10/16 职场文书
毕业论文答辩演讲稿
2015/06/23 职场文书