基于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 1.4.2发布!主要是性能与API
Feb 25 Javascript
JQuery中attr方法和removeAttr方法用法实例
May 18 Javascript
Jquery实现瀑布流布局(备有详细注释)
Jul 31 Javascript
jQuery实现固定在网页顶部的菜单效果代码
Sep 02 Javascript
浅谈Javascript中Object与Function对象
Sep 26 Javascript
Javascript日期格式化format函数的使用方法
Aug 30 Javascript
微信小程序 数据封装,参数传值等经验分享
Jan 09 Javascript
详解Nuxt.js Vue服务端渲染摸索
Feb 08 Javascript
微信小程序上传多图到服务器并获取返回的路径
May 05 Javascript
Angular8基础应用之表单及其验证
Aug 11 Javascript
微信小程序实现锚点功能
Nov 20 Javascript
微信小程序实现上传多张图片、删除图片
Jul 29 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实现根据IP地址获取其所在省市的方法
2015/04/30 PHP
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
JavaScript 字符编码规则
2009/05/04 Javascript
jquery中的on方法使用介绍
2013/12/29 Javascript
node.js中的fs.readlink方法使用说明
2014/12/17 Javascript
js实现可得到不同颜色值的颜色选择器实例
2015/02/28 Javascript
jquery实现模拟百分比进度条渐变效果代码
2015/10/29 Javascript
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
js利用appendChild对标签进行排序的实现方法
2016/10/16 Javascript
angular中实现控制器之间传递参数的方式
2017/04/24 Javascript
JS实现的找零张数最小问题示例
2017/11/28 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
vue的过滤器filter实例详解
2018/09/17 Javascript
vue-cli项目无法用本机IP访问的解决方法
2018/09/20 Javascript
Vue中的Props(不可变状态)
2018/09/29 Javascript
Django+Vue实现WebSocket连接的示例代码
2019/05/28 Javascript
vue缓存之keep-alive的理解和应用详解
2020/11/02 Javascript
Python 实现王者荣耀中的敏感词过滤示例
2019/01/21 Python
Python GUI编程 文本弹窗的实例
2019/06/11 Python
python 进程的几种创建方式详解
2019/08/29 Python
python3处理word文档实例分析
2020/12/01 Python
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
CSS代码检查工具stylelint的使用方法详解
2021/03/27 HTML / CSS
实习教师个人的自我评价
2013/11/08 职场文书
绩效专员岗位职责
2013/12/02 职场文书
计算机专业职业生涯规划范文
2014/01/19 职场文书
党员公开承诺书范文
2014/03/25 职场文书
购房协议书
2014/04/11 职场文书
财务个人年度总结范文
2015/02/26 职场文书
2015年五一劳动节慰问信
2015/03/23 职场文书
2015年法制宣传月活动总结
2015/03/26 职场文书
80后创业总结的9条职场用人思想,记得收藏
2019/08/13 职场文书
Python Django获取URL中的数据详解
2021/11/01 Python
node快速搭建后台的实现步骤
2022/02/18 NodeJs
Python学习之异常中的finally使用详解
2022/03/16 Python