基于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 相关文章推荐
如何使用JS获取IE上传文件路径(IE7,8)
Jul 08 Javascript
用js编写的简单的计算器代码程序
Aug 04 Javascript
AngularJS向后端ASP.NET API控制器上传文件
Feb 03 Javascript
vue2.0实战之基础入门(1)
Mar 27 Javascript
Angular5中状态管理的实现
Sep 03 Javascript
js jquery 获取某一元素到浏览器顶端的距离实现方法
Sep 05 jQuery
Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验
Apr 22 Javascript
解决vue中使用proxy配置不同端口和ip接口问题
Aug 14 Javascript
原生js实现随机点名功能
Nov 05 Javascript
详解js location.href和window.open的几种用法和区别
Dec 02 Javascript
基于脚手架创建Vue项目实现步骤详解
Aug 03 Javascript
基于VUE实现简单的学生信息管理系统
Jan 13 Vue.js
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提示Notice: Undefined variable的解决办法
2012/11/24 PHP
zf框架db类的分页示例分享
2014/03/14 PHP
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
2019/10/25 PHP
JavaScript中出现乱码的处理心得
2009/12/24 Javascript
仅Firefox中链接A无法实现模拟点击以触发其默认行为
2011/07/31 Javascript
Three.js源码阅读笔记(光照部分)
2012/12/27 Javascript
用函数模板,写一个简单高效的 JSON 查询器的方法介绍
2013/04/17 Javascript
EasyUI,点击开启编辑框,并且编辑框获得焦点的方法
2015/03/01 Javascript
JavaScript实现非常简单实用的下拉菜单效果
2015/08/27 Javascript
javascript实现tab切换的四种方法
2015/11/05 Javascript
深入浅析NodeJs并发异步的回调处理
2015/12/21 NodeJs
js删除局部变量的实现方法
2016/06/25 Javascript
Bootstrap按钮功能之查询按钮和重置按钮
2016/10/26 Javascript
第一次记录Bootstrap table学习笔记(1)
2017/05/18 Javascript
bootstrap+jQuery实现的动态进度条功能示例
2017/05/25 jQuery
Vue.js实例方法之生命周期详解
2017/07/03 Javascript
还不懂递归?读完这篇文章保证你会懂
2018/07/29 Javascript
layDate日期控件使用方法详解
2018/11/15 Javascript
详解node登录接口之密码错误限制次数(含代码)
2019/10/25 Javascript
vue prop属性传值与传引用示例
2019/11/13 Javascript
小程序自定义模板实现吸顶功能
2020/01/08 Javascript
[02:29]完美世界高校联赛上海赛区回顾
2015/12/15 DOTA
浅析python 内置字符串处理函数的使用方法
2014/06/11 Python
python调用机器喇叭发出蜂鸣声(Beep)的方法
2015/03/23 Python
python利用thrift服务读取hbase数据的方法
2018/12/27 Python
centos7之Python3.74安装教程
2019/08/15 Python
财务管理专业毕业生求职信范文
2013/09/21 职场文书
校园之声广播稿
2014/01/31 职场文书
2014年效能监察工作总结
2014/11/21 职场文书
讲文明倡议书
2015/04/29 职场文书
贫困证明怎么写
2015/06/16 职场文书
信息技术教研组工作总结
2015/08/13 职场文书
校园广播稿范文
2015/08/19 职场文书
新手必备之MySQL msi版本下载安装图文详细教程
2021/05/21 MySQL
python之np.argmax()及对axis=0或者1的理解
2021/06/02 Python
如何用python清洗文件中的数据
2021/06/18 Python