基于javascript实现图片懒加载


Posted in Javascript onJanuary 05, 2016

一、定义

图片延迟加载也称为懒加载,延迟加载图片或符合某些条件时才加载某些图片,通常用于图片比较多的网页。可以减少请求数或者延迟请求数,优化性能。

 二、呈现形式

【1】延时加载,使用setTimeout或setInterval进行加载延迟,如果用户在加载前就离开,自然就不会进行加载。
【2】条件加载,符合某些条件或者触发了某些条件才开始异步加载。
【3】可视区域加载,仅仅加载用户可以看到的区域,这个主要监控滚动条来实现,一般距离用户看到的底边很近的时候开始加载,这样能保证用户下拉时图片正好接上,不会有太长时间的停顿。

 三、基本步骤

【1】网页中的图片都设为同一张图片
【2】给图片增加data-original = "img/test.jpg"的属性,保存图片的真实地址
【3】当触发某些条件时,自动改变该区域的图片的src属性为真实的地址 

四、应用

1、点击按钮显示图片

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
body{
  margin: 0;
}
img{
  height: 100px;
  width: 100px;
}
</style>
</head>
<body>
<button>加载图片</button>
<img src="#" alt="测试" data-original = "img/test.png">
<script>
var oBtn = document.getElementsByTagName('button')[0];
var oImg = document.images[0];  
oBtn.onclick = function(){
  oImg.src = "img/loading.gif";
  if(oImg.dataset){
    aftLoadImg(oImg,oImg.dataset.original);  
  }else{
    aftLoadImg(oImg,oImg.getAttribute("data-original"));
  }
}
function aftLoadImg(obj,url){
  var oImg = new Image();
  oImg.onload = function(){
    obj.src = oImg.src;
  }
  oImg.src = url;
}
</script>  
</body>
</html>

2、可视区显示图片

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
body{
  margin: 0;
}
ul{
  margin: 0;
  padding: 0;
  list-style: none;
}
img{
  border: none;
  vertical-align: middle;
}
.in{
  border: 1px solid black;
  margin: 10px;
  text-align: center;
  height: 400px;
  width: 400px;
  float: left;
}
.in img{
  height: 400px;
  width: 400px;
}
</style>
</head>
<body>
<ul class="list">
  <li class="in"><img src="img/loading.gif" alt="测试" data-original = "img/img1.gif"></li>
  <li class="in"><img src="img/loading.gif" alt="测试" data-original = "img/img2.gif"></li>
  <li class="in"><img src="img/loading.gif" alt="测试" data-original = "img/img3.gif"></li>
  <li class="in"><img src="img/loading.gif" alt="测试" data-original = "img/img4.gif"></li>  
  <li class="in"><img src="img/loading.gif" alt="测试" data-original = "img/img1.gif"></li>
  <li class="in"><img src="img/loading.gif" alt="测试" data-original = "img/img2.gif"></li>
  <li class="in"><img src="img/loading.gif" alt="测试" data-original = "img/img3.gif"></li>
  <li class="in"><img src="img/loading.gif" alt="测试" data-original = "img/img4.gif"></li>              
</ul>

<script>
var oBtn = document.getElementsByTagName('button')[0];
var aImages = document.images;
loadImg(aImages);
window.onscroll = function(){
  loadImg(aImages);
};
function loadImg(arr){
  for( var i = 0,len = arr.length; i < len; i++){
    if(arr[i].getBoundingClientRect().top < document.documentElement.clientHeight && !arr[i].isLoad){
      arr[i].isLoad = true;
      arr[i].style.cssText = "transition: ''; opacity: 0;"
      if(arr[i].dataset){
        aftLoadImg(arr[i],arr[i].dataset.original);  
      }else{
        aftLoadImg(arr[i],arr[i].getAttribute("data-original"));
      }
      (function(i){
        setTimeout(function(){
          arr[i].style.cssText = "transition: 1s; opacity: 1;"
        },16)
      })(i);
    }
  }
}
function aftLoadImg(obj,url){
  var oImg = new Image();
  oImg.onload = function(){
    obj.src = oImg.src;
  }
  oImg.src = url;
}

</script>  
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,顺利实现javascript图片懒加载。

Javascript 相关文章推荐
用javascript获取地址栏参数
Dec 22 Javascript
JQuery 确定css方框模型(盒模型Box Model)
Jan 22 Javascript
jQuery autocomplate 自扩展插件、自动完成示例代码
Mar 28 Javascript
js实现图片放大缩小功能后进行复杂排序的方法
Nov 08 Javascript
jQuery中delegate与on的用法与区别示例介绍
Dec 20 Javascript
JavaScript基于ajax编辑信息用法实例
Jul 15 Javascript
JS实现网页顶部向下滑出的全国城市切换导航效果
Aug 22 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
Jul 27 Javascript
深入浅出es6模板字符串
Aug 26 Javascript
微信网页登录逻辑与实现方法
Apr 29 Javascript
微信小程序 下拉刷新及上拉加载原理解析
Nov 06 Javascript
Javascript节流函数throttle和防抖函数debounce
Dec 03 Javascript
this,this,再次讨论javascript中的this,超全面(经典)
Jan 05 #Javascript
基于javascript实现图片预加载
Jan 05 #Javascript
JavaScript、tab切换完整版(自动切换、鼠标移入停止、移开运行)
Jan 05 #Javascript
javascript设置和获取cookie的方法实例详解
Jan 05 #Javascript
javascript简单比较日期大小的方法
Jan 05 #Javascript
js与jQuery实现checkbox复选框全选/全不选的方法
Jan 05 #Javascript
简述jQuery ajax的执行顺序
Jan 05 #Javascript
You might like
php中数据的批量导入(csv文件)
2006/10/09 PHP
Yii2实现让关联字段支持搜索功能的方法
2016/08/10 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
实现PHP中session存储及删除变量
2018/10/15 PHP
PHP如何使用array_unshift()在数组开头插入元素
2020/09/01 PHP
JXTree对象,读取外部xml文件数据,生成树的函数
2007/04/02 Javascript
javascript GUID生成器实现代码
2009/10/31 Javascript
js简单时间比较的方法
2016/08/02 Javascript
解决node.js安装包失败的几种方法
2016/09/02 Javascript
JS实现控制图片显示大小的方法【图片等比例缩放功能】
2017/02/18 Javascript
详解用webpack2.0构建vue2.0超详细精简版
2017/04/05 Javascript
Angular4.x通过路由守卫进行路由重定向实现根据条件跳转到相应的页面(推荐)
2018/05/10 Javascript
浅谈Vue.js路由管理器 Vue Router
2018/08/16 Javascript
vue-cli3项目配置eslint代码规范的完整步骤
2020/09/10 Javascript
Python ORM框架SQLAlchemy学习笔记之映射类使用实例和Session会话介绍
2014/06/10 Python
用Python制作检测Linux运行信息的工具的教程
2015/04/01 Python
使用Python的Flask框架构建大型Web应用程序的结构示例
2016/06/04 Python
matplotlib简介,安装和简单实例代码
2017/12/26 Python
通过Py2exe将自己的python程序打包成.exe/.app的方法
2018/05/26 Python
python实现反转部分单向链表
2018/09/27 Python
深入了解和应用Python 装饰器 @decorator
2019/04/02 Python
PyTorch中Tensor的维度变换实现
2019/08/18 Python
Pytorch实现WGAN用于动漫头像生成
2021/03/04 Python
css3 线性渐变和径向渐变示例附图
2014/04/08 HTML / CSS
详解HTML5之pushstate、popstate操作history,无刷新改变当前url
2017/03/15 HTML / CSS
您的网上新华书店:文轩网
2016/08/24 全球购物
公务员转正考察材料
2014/02/07 职场文书
2014三八妇女节活动总结
2014/03/01 职场文书
库房管理员岗位职责
2014/03/09 职场文书
幼儿教师寄语集锦
2014/04/03 职场文书
项目建议书范文
2014/05/12 职场文书
物理系毕业生自荐书
2014/06/13 职场文书
离婚代理词范文
2015/05/23 职场文书
结婚喜宴祝酒词
2015/08/10 职场文书
甜美蛋糕店的创业计划书模板,拿来即用!
2019/08/21 职场文书
Java 关于String字符串原理上的问题
2022/04/07 Java/Android