基于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 相关文章推荐
IE浏览器PNG图片透明效果代码
Sep 02 Javascript
js 跨域和ajax 跨域问题小结
Jul 01 Javascript
基于Jquery的淡入淡出的特效基础练习
Dec 13 Javascript
原生javascript实现无间缝滚动示例
Jan 28 Javascript
js实现图片旋转的三种方法
Apr 10 Javascript
Javascript实现商品秒杀倒计时(时间与服务器时间同步)
Sep 16 Javascript
javascript 判断页面访问方式电脑或者移动端
Sep 19 Javascript
jQuery时间验证和转换为标准格式的时间格式
Mar 06 Javascript
使用jQuery给Table动态增加行、清空table的方法
Sep 05 jQuery
vue图片加载失败时用默认图片替换的方法
Aug 29 Javascript
JavaScript实现像雪花一样的Hexaflake分形
Jul 07 Javascript
vue element table中自定义一些input的验证操作
Jul 18 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
介绍几个array库的新函数 php
2006/12/29 PHP
PHP时间戳使用实例代码
2008/06/07 PHP
精美漂亮的php分页类代码
2013/04/02 PHP
PHP数据库万能引擎类adodb配置使用以及实例集锦
2014/06/12 PHP
PHPer 需要了解的 5 个 Composer 小技巧
2014/08/18 PHP
PHP保存带BOM文件的方法
2015/02/12 PHP
纯PHP代码实现支付宝批量付款
2015/12/24 PHP
Zend Framework教程之Loader以及PluginLoader用法详解
2016/03/09 PHP
PHP并发多进程处理利器Gearman使用介绍
2016/05/16 PHP
24条货真价实的PHP代码优化技巧
2016/07/28 PHP
2017年最新PHP经典面试题目汇总(上篇)
2017/03/17 PHP
PDO::errorCode讲解
2019/01/28 PHP
Laravel框架Auth用户认证操作实例分析
2019/09/29 PHP
PHP ElasticSearch做搜索实例讲解
2020/02/05 PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
2020/06/05 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
2020/11/23 PHP
WEB页子窗口(showModalDialog和showModelessDialog)使用说明
2009/10/25 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
2014/06/09 Javascript
vue调用高德地图实例代码
2017/04/28 Javascript
Angular 5.0 来了! 有这些大变化
2017/11/15 Javascript
Vue实现购物车详情页面的方法
2019/08/20 Javascript
[01:03:36]Ti4 循环赛第三日DK vs Titan
2014/07/12 DOTA
[41:13]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第一场 11.20
2020/11/20 DOTA
Python实现的Google IP 可用性检测脚本
2015/04/23 Python
python utc datetime转换为时间戳的方法
2019/01/15 Python
Python hashlib模块加密过程解析
2019/11/05 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
2020/01/24 Python
Python 实现自动登录+点击+滑动验证功能
2020/06/10 Python
HTML文本属性&amp;颜色控制属性的实现
2019/12/17 HTML / CSS
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
售后主管岗位职责
2013/12/08 职场文书
安全教育心得体会
2013/12/29 职场文书
本科生导师推荐信范文
2014/05/18 职场文书
乡领导班子四风问题对照检查材料
2014/09/25 职场文书
社会实践心得体会范文
2016/01/14 职场文书
SQL Server2019安装的详细步骤实战记录(亲测可用)
2022/06/10 SQL Server