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 相关文章推荐
js制作的鼠标悬浮时产生的下拉框效果
Oct 27 Javascript
ie8 不支持new Date(2012-11-10)问题的解决方法
Jul 31 Javascript
jquery获取复选框被选中的值
Mar 22 Javascript
js解决select下拉选不中问题
Oct 14 Javascript
node.js中的http.response.end方法使用说明
Dec 14 Javascript
JQuery显示隐藏DIV的方法及代码实例
Apr 16 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
Jun 08 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
Jun 08 Javascript
angularjs性能优化的方法
Sep 05 Javascript
angular.js实现列表orderby排序的方法
Oct 02 Javascript
详解小程序开发经验:多页面数据同步
May 18 Javascript
基于js实现抽红包并分配代码实例
Sep 19 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 if 想到的些问题
2008/03/22 PHP
PHP下通过系统信号量加锁方式获取递增序列ID
2009/09/25 PHP
用PHP为SHOPEX增加日志功能代码
2010/07/02 PHP
php中final关键字用法分析
2016/12/07 PHP
PHP编程中的Session阻塞问题与解决方法分析
2017/08/07 PHP
FireFox JavaScript全局Event对象
2009/06/14 Javascript
jQuery News Ticker 基于jQuery的即时新闻行情展示插件
2011/11/05 Javascript
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
2012/12/17 Javascript
Jquery方式获取iframe页面中的 Dom元素
2014/05/07 Javascript
jquery实现的V字形显示效果代码
2015/10/27 Javascript
AngularJS  $on、$emit和$broadcast的使用
2016/09/05 Javascript
微信小程序开发(一) 微信登录流程详解
2017/01/11 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
2017/02/13 Javascript
angular 动态组件类型详解(四种组件类型)
2017/02/22 Javascript
React Native中导航组件react-navigation跨tab路由处理详解
2017/10/31 Javascript
移动web开发之touch事件实例详解
2018/01/17 Javascript
vue动态路由配置及路由传参的方式
2018/05/23 Javascript
JS栈stack类的实现与使用方法示例
2019/01/31 Javascript
jQuery编写QQ简易聊天框
2020/08/27 jQuery
Python中的高级函数map/reduce使用实例
2015/04/13 Python
Python字符串替换实例分析
2015/05/11 Python
python2.6.6如何升级到python2.7.14
2018/04/08 Python
python 获取list特定元素下标的实例讲解
2018/04/09 Python
对python3 中方法各种参数和返回值详解
2018/12/15 Python
Python 批量刷博客园访问量脚本过程解析
2019/08/30 Python
中学生获奖感言
2014/02/04 职场文书
初三学习计划书范文
2014/04/30 职场文书
学校校庆演讲稿
2014/05/22 职场文书
暖通工程师岗位职责
2014/06/12 职场文书
国际经济与贸易专业求职信
2014/07/10 职场文书
购房协议书范本(无房产证)
2014/10/07 职场文书
《爱的教育》读书心得
2014/11/08 职场文书
病危通知书样本
2015/04/17 职场文书
SQL Server作业失败:无法确定所有者是否有服务器访问权限的解决方法
2021/06/30 SQL Server
sass 常用备忘案例详解
2021/09/15 HTML / CSS
Vue的过滤器你真了解吗
2022/02/24 Vue.js