基于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 相关文章推荐
jquery乱码与contentType属性设置问题解决方案
Jan 07 Javascript
js Map List 遍历使用示例
Jul 10 Javascript
js 实现 input type=&quot;file&quot; 文件上传示例代码
Aug 07 Javascript
用json方式实现在 js 中建立一个map
May 02 Javascript
JavaScript中的值类型详细介绍
Dec 29 Javascript
Javascript访问器属性实例分析
Dec 30 Javascript
原生js实现网页顶部自动下拉/收缩广告效果
Jan 20 Javascript
js仿淘宝商品放大预览功能
Mar 15 Javascript
js实现图片懒加载效果
Jul 17 Javascript
angular2模块和共享模块详解
Apr 08 Javascript
jQuery实现基本淡入淡出效果的方法详解
Sep 05 jQuery
如何将JavaScript将数组转为树形结构
Jun 02 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常用字符串比较函数实例汇总
2014/11/24 PHP
php设计模式之单例模式实例分析
2015/02/25 PHP
CodeIgniter框架实现的整合Smarty引擎DEMO示例
2019/03/28 PHP
解决Laravel 使用insert插入数据,字段created_at为0000的问题
2019/10/11 PHP
基于prototype的validation.js发布2.3.4新版本,让你彻底脱离表单验证的烦恼
2006/12/06 Javascript
js判断是否为数组的函数: isArray()
2011/10/30 Javascript
jQuery.extend 函数的详细用法
2012/06/27 Javascript
解析Javascript中中括号“[]”的多义性
2013/12/03 Javascript
javascript实现带下拉子菜单的导航菜单效果
2015/05/14 Javascript
JavaScript 基础函数_深入剖析变量和作用域
2016/05/18 Javascript
纯js三维数组实现三级联动效果
2017/02/07 Javascript
JS简单生成由字母数字组合随机字符串示例
2018/05/25 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
2018/08/19 Javascript
three.js搭建室内场景教程
2018/12/30 Javascript
vue中实现Monaco Editor自定义提示功能
2019/07/05 Javascript
微信小程序页面间传递数组对象方法解析
2019/11/06 Javascript
js实现点击选项置顶动画效果
2020/08/25 Javascript
Python程序语言快速上手教程
2012/07/18 Python
python输出当前目录下index.html文件路径的方法
2015/04/28 Python
python中aioysql(异步操作MySQL)的方法
2019/04/11 Python
python实现得到当前登录用户信息的方法
2019/06/21 Python
Python math库 ln(x)运算的实现及原理
2019/07/17 Python
用Python调用win命令行提高工作效率的实例
2019/08/14 Python
python中Lambda表达式详解
2019/11/20 Python
django序列化serializers过程解析
2019/12/14 Python
Tensorflow 使用pb文件保存(恢复)模型计算图和参数实例详解
2020/02/11 Python
python 19个值得学习的编程技巧
2020/08/15 Python
Window10上Tensorflow的安装(CPU和GPU版本)
2020/12/15 Python
日本小田急百货官网:Odakyu
2018/07/19 全球购物
高级护理实习生自荐信
2013/09/28 职场文书
高级护理专业大学生求职信
2013/10/24 职场文书
网管求职信
2014/03/03 职场文书
科研课题实施方案
2014/03/18 职场文书
毕业生实习期转正自我鉴定
2014/09/26 职场文书
高中生自我评价范文2015
2015/03/03 职场文书
golang如何去除多余空白字符(含制表符)
2021/04/25 Golang