快速实现JS图片懒加载(可视区域加载)示例代码


Posted in Javascript onJanuary 04, 2017

js懒加载图片

如何提高网页加载速度?在网页中有许多img标签,这些标签就是图片,其属性src则是指向服务器地址,当浏览器从上往下读取到src标签中的地址时,浏览器就会开启线程,加载这张图片。而并不是等到整张页面都解析完成才加载图片。我们要做的就是加载用户可视范围内的图片。

js懒加载图片的目的

     1.网页优化,提高网页加载速度

     2.页面优化友好,提高SEO收录与排名

     3.提高用户体验,减少服务器压力

快速实现JS图片懒加载(可视区域加载)示例代码

快速实现JS图片懒加载(可视区域加载)示例代码

实例代码如下:

<!DOCTYPE html>
<html lang="en">

 <head>
 <meta charset="UTF-8">
 <title>图片懒加载(可视区域加载)</title>
 <style>
  * {
  padding: 0px;
  margin: 0px;
  }
  
  html,
  body {
  width: 100%;
  min-height: 100%;
  }
  
  #SB {
  margin: 0;
  padding: 0;
  list-style: none;
  }
  
  #SB .in {
  border: 1px solid red;
  margin: 10px;
  text-align: center;
  height: 400px;
  width: 400px;
  float: left;
  }
  
  .in img {
  border: none;
  vertical-align: middle;
  height: 400px;
  width: 400px;
  }
 </style>
 </head>

 <body>
 <ul id="SB">
  <li class="in"><img src="" data-imgurl="img/1.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/2.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/3.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/4.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/5.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/6.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/7.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/8.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/9.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/10.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/11.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/12.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/13.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/14.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/15.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/16.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/1.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/2.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/3.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/4.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/5.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/6.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/7.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/8.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/9.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/10.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/11.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/12.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/13.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/14.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/15.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/16.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/1.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/2.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/3.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/4.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/5.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/6.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/7.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/8.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/9.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/10.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/11.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/12.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/13.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/14.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/15.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/16.jpg"></li>
 </ul>
 <script type="text/javascript">
  var aImages = document.getElementById("SB").getElementsByTagName('img'); //获取id为SB的文档内所有的图片
  loadImg(aImages);
  window.onscroll = function() { //滚动条滚动触发
  loadImg(aImages);
  };
  //getBoundingClientRect 是图片懒加载的核心
  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 = "opacity: 0;"; 
   (function(i) {
    setTimeout(function() {
    if(arr[i].dataset) { //兼容不支持data的浏览器
     aftLoadImg(arr[i], arr[i].dataset.imgurl);
    } else {
     aftLoadImg(arr[i], arr[i].getAttribute("data-imgurl"));
    }
    arr[i].style.cssText = "transition: 1s; opacity: 1;" //相当于fadein
    }, 500)
   })(i);
   }
  }
  }

  function aftLoadImg(obj, url) {
  var oImg = new Image();
  oImg.onload = function() {
   obj.src = oImg.src; //下载完成后将该图片赋给目标obj目标对象
  }
  oImg.src = url; //oImg对象先下载该图像
  }
 </script>
 </body>

</html>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
onpropertypchange
Jul 01 Javascript
js宝典学习笔记(上)
Jan 10 Javascript
JavaScript效率调优经验
Jun 04 Javascript
JS.elementGetStyle(element, style)应用示例
Sep 24 Javascript
js判断图片加载完成后获取图片实际宽高的方法
Feb 25 Javascript
浅析JavaScript中浏览器的兼容问题
Apr 19 Javascript
实例解析Array和String方法
Dec 14 Javascript
jquery自定义插件结合baiduTemplate.js实现异步刷新(附源码)
Dec 22 Javascript
详解js产生对象的3种基本方式(工厂模式,构造函数模式,原型模式)
Jan 09 Javascript
JavaScript异步加载问题总结
Feb 17 Javascript
JavaScript ES6箭头函数使用指南
Dec 30 Javascript
微信小程序 this.triggerEvent()的具体使用
Dec 10 Javascript
基于jQuery实现选项卡效果
Jan 04 #Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
Jan 04 #Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
Jan 04 #Javascript
jQuery实现联动下拉列表查询框
Jan 04 #Javascript
JavaScript中String对象的方法介绍
Jan 04 #Javascript
js select下拉联动 更具级联性!
Apr 17 #Javascript
基于JavaScript实现熔岩灯效果导航菜单
Jan 04 #Javascript
You might like
如何将一个表单同时提交到两个地方处理
2006/10/09 PHP
php adodb操作mysql数据库
2009/03/19 PHP
PHP 防恶意刷新实现代码
2010/05/16 PHP
PHP中其实也可以用方法链
2011/11/10 PHP
ASP和PHP实现生成网站快捷方式并下载到桌面的方法
2014/05/08 PHP
php好代码风格的阶段性总结
2016/06/25 PHP
PHP中命名空间的使用例子
2019/03/22 PHP
有关js的变量作用域和this指针的讨论
2010/12/16 Javascript
简单的js图片轮换代码(js图片轮播)
2014/05/06 Javascript
js中hash和ico的关联分析
2015/02/05 Javascript
jquery弹出遮掩层效果【附实例代码】
2016/04/28 Javascript
jQuery实现的放大镜效果示例
2016/09/13 Javascript
微信小程序 slider的简单实例
2017/04/19 Javascript
利用ES6实现单例模式及其应用详解
2017/12/09 Javascript
如何换个角度使用VUE过滤器详解
2019/09/11 Javascript
Element Tooltip 文字提示的使用示例
2020/07/26 Javascript
[02:26]DOTA2英雄米拉娜基础教程
2013/11/25 DOTA
[03:52]DOTA2英雄基础教程 酒仙
2013/12/23 DOTA
举例区分Python中的浅复制与深复制
2015/07/02 Python
Python中的字符串类型基本知识学习教程
2016/02/04 Python
Python利用带权重随机数解决抽奖和游戏爆装备问题
2016/06/16 Python
Python3实现获取图片文字里中文的方法分析
2018/12/13 Python
pymysql 开启调试模式的实现
2019/09/24 Python
python基于socket实现的UDP及TCP通讯功能示例
2019/11/01 Python
基于Python计算圆周率pi代码实例
2020/03/25 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
2020/05/24 Python
python中uuid模块实例浅析
2020/12/29 Python
html5仿支付宝密码框的实现代码
2017/09/06 HTML / CSS
Under Armour安德玛法国官网:美国高端运动科技品牌
2018/06/29 全球购物
将n个数按输入顺序的逆序排列,用函数实现
2012/11/14 面试题
介绍一下gcc特性
2015/10/31 面试题
先进工作者获奖感言
2014/02/08 职场文书
祖国在我心中演讲稿300字
2014/05/04 职场文书
2015年清明节活动总结
2015/02/09 职场文书
领导离职感言
2015/08/03 职场文书
浅析python中特殊文件和特殊函数
2022/02/24 Python