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 相关文章推荐
让innerText在firefox火狐和IE浏览器都能用的写法
May 14 Javascript
Javascript实现返回上一页面并刷新的小例子
Dec 11 Javascript
jQuery之ajax删除详解
Feb 27 Javascript
javascript中的取反再取反~~没有意义
Apr 06 Javascript
Javscript调用iframe框架页面中函数的方法
Nov 01 Javascript
使用javascript实现简单的选项卡切换
Jan 09 Javascript
JavaScript中神奇的call()方法
Mar 12 Javascript
Vue.js使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
May 10 Javascript
Angular4.0中引入laydate.js日期插件的方法教程
Dec 25 Javascript
vue内置指令详解
Apr 03 Javascript
微信小程序实现一张或多张图片上传(云开发)
Sep 25 Javascript
Vue-cli项目部署到Nginx服务器的方法
Nov 01 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
图书管理程序(一)
2006/10/09 PHP
PHP分页显示制作详细讲解
2008/11/19 PHP
纯真IP数据库的应用 IP地址转化成十进制
2009/06/14 PHP
ThinkPHP模板输出display用法分析
2014/11/26 PHP
php数组冒泡排序算法实例
2016/05/06 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
[IE&amp;FireFox兼容]JS对select操作
2007/01/07 Javascript
js实现拖拽 闭包函数详细介绍
2012/11/25 Javascript
深入理解javaScript中的事件驱动
2013/05/21 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
jquery实现文本框数量加减功能的例子分享
2014/05/10 Javascript
webpack常用配置项配置文件介绍
2016/11/07 Javascript
微信小程序开发之toast提示插件使用示例
2017/06/08 Javascript
基于hover的用法实例(推荐)
2017/07/04 Javascript
Iview Table组件中各种组件扩展的使用
2018/10/20 Javascript
Vue实现图片与文字混输效果
2019/12/04 Javascript
用Python操作字符串之rindex()方法的使用
2015/05/19 Python
python数组复制拷贝的实现方法
2015/06/09 Python
Python的Socket编程过程中实现UDP端口复用的实例分享
2016/03/19 Python
Python使用当前时间、随机数产生一个唯一数字的方法
2017/09/18 Python
在matplotlib的图中设置中文标签的方法
2018/12/13 Python
Python Django Vue 项目创建过程详解
2019/07/29 Python
Django中从mysql数据库中获取数据传到echarts方式
2020/04/07 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
2020/11/24 Python
详解css3自定义滚动条样式写法
2017/12/25 HTML / CSS
国际领先的学术出版商:Springer
2017/01/11 全球购物
欧洲最大的预定车位市场:JustPark
2020/01/06 全球购物
为什么需要版本控制?
2013/08/08 面试题
校班主任推荐信范文
2013/12/03 职场文书
周年庆促销方案
2014/03/15 职场文书
企业厂务公开实施方案
2014/03/26 职场文书
艺术设计专业个人求职信
2014/04/10 职场文书
开幕式邀请函
2015/01/31 职场文书
浅谈@Value和@Bean的执行顺序问题
2021/06/16 Java/Android
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle
Redis安装使用RedisJSON模块的方法
2022/03/23 Redis