基于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 JavaScript获取Url参数,src属性参数
Mar 09 Javascript
jquery获取tr中控件值并操作tr实现思路
Mar 27 Javascript
jQuery中contents()方法用法实例
Jan 08 Javascript
js中跨域方法原理详解
Jul 19 Javascript
jQuery支持添加事件的日历特效代码分享(3种样式)
Aug 24 Javascript
javascript 继承学习心得总结
Mar 17 Javascript
浅谈jquery上下滑动的注意事项
Oct 13 Javascript
jQuery的$.extend 浅拷贝与深拷贝
Mar 08 Javascript
jQuery的时间datetime控件在AngularJs中的使用实例(分享)
Aug 17 jQuery
JavaScript实现一个简易的计算器实例代码
May 10 Javascript
Vue 中 template 有且只能一个 root的原因解析(源码分析)
Apr 11 Javascript
vue中后端做Excel导出功能返回数据流前端的处理操作
Sep 08 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边学边教》(01.开篇――准备工作)
2006/12/13 PHP
写一段简单的PHP建立文件夹代码
2015/01/06 PHP
php生成唯一的订单函数分享
2015/02/02 PHP
PHP基于Redis消息队列实现发布微博的方法
2017/05/03 PHP
php+js实现的无刷新下载文件功能示例
2019/08/23 PHP
laravel自定义分页的实现案例offset()和limit()
2019/10/15 PHP
清除div下面的所有标签的方法
2014/02/17 Javascript
createTextRange()的使用示例含文本框选中部分文字内容
2014/02/24 Javascript
JavaScript sub方法入门实例(把字符串显示为下标)
2014/10/17 Javascript
JavaScript中的object转换成number或string规则介绍
2014/12/31 Javascript
js中substring和substr两者区别和使用方法
2015/11/09 Javascript
十大热门的JavaScript框架和库
2017/03/21 Javascript
bootstrap响应式表格实例详解
2017/05/15 Javascript
JavaScript字符串_动力节点Java学院整理
2017/06/27 Javascript
使用nvm管理不同版本的node与npm的方法
2017/10/31 Javascript
解决nodejs的npm命令无反应的问题
2018/05/17 NodeJs
Vue列表渲染的示例代码
2018/11/01 Javascript
微信小程序--获取用户地理位置名称(无须用户授权)的方法
2019/04/29 Javascript
ant design实现圈选功能
2019/12/17 Javascript
JS实现炫酷轮播图
2020/11/15 Javascript
在SAE上部署Python的Django框架的一些问题汇总
2015/05/30 Python
查找python项目依赖并生成requirements.txt的方法
2018/07/10 Python
Appium+python自动化怎么查看程序所占端口号和IP
2019/06/14 Python
Python : turtle色彩控制实例详解
2020/01/19 Python
Python如何telnet到网络设备
2021/02/18 Python
介绍一下Linux内核的排队自旋锁
2014/08/27 面试题
医学生个人求职信范文
2013/09/24 职场文书
公司营业员的工作总结自我评价
2013/10/05 职场文书
优秀毕业生求职信范文
2014/01/02 职场文书
2015年七一建党节活动方案
2015/05/05 职场文书
2015年街道除四害工作总结
2015/05/15 职场文书
第一军规观后感
2015/06/12 职场文书
让人感觉高大上的讲话稿怎么写?
2019/07/08 职场文书
python flask开发的简单基金查询工具
2021/06/02 Python
图文详解matlab原始处理图像几何变换
2021/07/09 Python
手把手教你使用TensorFlow2实现RNN
2021/07/15 Python