JS图片懒加载技术实现过程解析


Posted in Javascript onJuly 27, 2020

懒加载技术

懒加载(LazyLoad)是前端优化的一种有效方式,极大的提升用户体验,图片一直是页面加载的流浪大户,现在一张图片几兆已经是很正常的事,远远大于代码的大小。

原理:页面加载后只让文档可视区内的图片显示,其它不显示,随着用户对页面的滚动,判断其区域位置,生成img标签,让到可视区的图片加载出来。

所用相关技术:给img加属性 (例如data-src),将图片的地址赋值给他,这样就生成img标签后再把data-src的值赋给img的src(通过dataset.src或者getAttribute('src'),再赋值给img.setAttribute('src'))。

jqueryLazyload方式

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css">
      *{
        margin:0px;
        padding: 0;
      }
      .wrap{
        overflow: hidden;
        width:915px;
        background:#2d2d2d;
        margin:50px auto;
        border-radius:10px;
        /*font-size:0px;*/
      }
      .wrap img{
        float:left;  
        display: block;
        width:280px;
        height:180px;
        margin:10px 10px;
        border:2px solid #7c7c7c;
        border-radius:10px;
      }
    </style> 
  </head>
  <body>
    
    <div class="wrap"> 
      <img src="js/images2/1.jpg" />
      <img src="js/images2/2.jpg" />
      <img src="js/images2/3.jpg" />
      <img src="js/images2/4.jpg" />
      <img src="js/images2/5.jpg" />
      <img src="js/images2/6.jpg" />
      <img src="js/images2/7.jpg" />
      <img src="js/images2/1.jpg" />
      <img src="js/images2/2.jpg" />
      <img src="js/images2/3.jpg" />
      <img src="js/images2/4.jpg" />
      <img src="js/images2/5.jpg" />
      <img src="js/images2/6.jpg" />
      <img src="js/images2/7.jpg" />
      <img src="js/images2/1.jpg" />
      <img src="js/images2/2.jpg" />
      <img src="js/images2/3.jpg" />
      <img src="js/images2/4.jpg" />
      <img src="js/images2/5.jpg" />
      <img src="js/images2/6.jpg" />
      <img src="js/images2/7.jpg" />
      <img src="js/images2/1.jpg" />
      <img src="js/images2/2.jpg" />
      <img src="js/images2/3.jpg" />
      <img src="js/images2/4.jpg" />
      <img src="js/images2/5.jpg" />
      <img src="js/images2/6.jpg" />
      <img src="js/images2/7.jpg" />
      <img src="js/images2/1.jpg" />
      <img src="js/images2/2.jpg" />
      <script src="js/jquery-1.11.1.min.js"></script>
      <script src="js/lazyload.js"></script>
      <script>
       $("img").lazyload({
        placeholder :"images2/loading.gif", //用图片提前占位
        // placeholder,值为某一图片路径.此图片用来占据将要加载的图片的位置,待图片加载时,占位图则会隐藏
       effect: "fadeIn", // 载入使用何种效果
        // effect(特效),值有show(直接显示),fadeIn(淡入),slideDown(下拉)等,常用fadeIn
       threshold: 200, // 提前开始加载
        // threshold,值为数字,代表页面高度.如设置为200,表示滚动条在离目标位置还有200的高度时就开始加载图片,可以做到不让用户察觉
       // event: 'click', // 事件触发时才加载
        // event,值有click(点击),mouseover(鼠标划过),sporty(运动的),foobar(…).可以实现鼠标莫过或点击图片才开始加载,后两个值未测试…
       //container: $("#container"), // 对某容器中的图片实现效果
        // container,值为某容器.lazyload默认在拉动浏览器滚动条时生效,这个参数可以让你在拉动某DIV的滚动条时依次加载其中的图片
       //failurelimit : 10 // 图片排序混乱时
         // failurelimit,值为数字.lazyload默认在找到第一张不在可见区域里的图片时则不再继续加载,但当HTML容器混乱的时候可能出现可见区域内图片并没加载出来的情况,failurelimit意在加载N张可见区域外的图片,以避免出现这个问题.
       });
      </script>
    </div>
  </body>
</html>

echo.js方式

echo.js是一款非常简单实用轻量级的图片延时加载插件,如果你的项目中没有依赖jquery,那么这将是个不错的选择,50行代码,压缩后才1k。当然你完全可以集成到自己项目中去。

下载地址:https://github.com/helijun/helijun/tree/master/plugin/echo

<style>
.demo img { 


width: 736px; 


height: 490px; 


background: url(images/loading.gif) 50% no-repeat;}
</style>

<div class="demo">
  <img class="lazy" src="images/blank.gif" data-echo="images/big-1.jpg">
</div>
<script src="js/echo.min.js"></script>
<script>
Echo.init({
  offset: 0,//离可视区域多少像素的图片可以被加载
 throttle: 0 //图片延时多少毫秒加载
}); 
</script>

说明:blank.gif是一张背景图片,包含在插件里了。图片的宽高必须设定,当然,可以使用外部样式对多张图片统一控制大小。data-echo指向的是真正的图片地址。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquey拖拽控件Draggable使用方法(asp.net环境)
Sep 28 Javascript
jQuery aminate方法定位到页面具体位置
Dec 26 Javascript
jQuery解析json数据实例分析
Nov 24 Javascript
JavaScript、jQuery与Ajax的关系
Jan 24 Javascript
深入理解事件冒泡(Bubble)和事件捕捉(capture)
May 28 Javascript
jquery封装插件时匿名函数形参和实参的写法解释
Feb 14 Javascript
js实现文字无缝向上滚动
Feb 16 Javascript
jQuery EasyUI window窗口使用实例代码
Dec 25 jQuery
JS简单实现查看文档创建日期、修改日期和文档大小的方法示例
Apr 08 Javascript
详解Vue.js在页面加载时执行某个方法
Nov 20 Javascript
解决vue组件props传值对象获取不到的问题
Jun 06 Javascript
浅谈Vue开发人员的7个最好的VSCode扩展
Jan 20 Vue.js
Element Notification通知的实现示例
Jul 27 #Javascript
Vue中watch、computed、updated三者的区别及用法
Jul 27 #Javascript
Element Backtop回到顶部的具体使用
Jul 27 #Javascript
解决vue中的无限循环问题
Jul 27 #Javascript
Element MessageBox弹框的具体使用
Jul 27 #Javascript
Vue 组件复用多次自定义参数操作
Jul 27 #Javascript
使用Element的InfiniteScroll 无限滚动组件报错的解决
Jul 27 #Javascript
You might like
ThinkPHP跳转页success及error模板实例教程
2014/07/17 PHP
PHP Opcache安装和配置方法介绍
2015/05/28 PHP
分享10段PHP常用代码
2015/11/11 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
详解JavaScript实现设计模式中的适配器模式的方法
2016/05/18 Javascript
BOM系列第二篇之定时器requestAnimationFrame
2016/08/17 Javascript
JS仿hao123导航页面图片轮播效果
2016/09/01 Javascript
深入分析node.js的异步API和其局限性
2016/09/05 Javascript
DOM事件探秘篇
2017/02/15 Javascript
JS实现的简单拖拽购物车功能示例【附源码下载】
2018/01/03 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
Javascript之高级数组API的使用实例
2019/03/08 Javascript
详解微信小程序实现跑马灯效果(附完整代码)
2019/04/29 Javascript
vue移动端使用canvas签名的实现
2020/01/15 Javascript
js实现验证码干扰(静态)
2021/02/22 Javascript
python连接mysql数据库示例(做增删改操作)
2013/12/31 Python
python使用7z解压软件备份文件脚本分享
2014/02/21 Python
Python sys.argv用法实例
2015/05/28 Python
Python函数和模块的使用总结
2019/05/20 Python
Python实现串口通信(pyserial)过程解析
2019/09/25 Python
TensorFlow梯度求解tf.gradients实例
2020/02/04 Python
Python unittest框架操作实例解析
2020/04/13 Python
Python如何实现定时器功能
2020/05/28 Python
Python requests模块安装及使用教程图解
2020/06/30 Python
python右对齐的实例方法
2020/07/05 Python
Python json解析库jsonpath原理及使用示例
2020/11/25 Python
html5中去掉input type date默认样式的方法
2018/09/06 HTML / CSS
详解html5 shiv.js和respond.min.js
2018/01/24 HTML / CSS
美国迪克体育用品商店:DICK’S Sporting Goods
2018/07/24 全球购物
西班牙香水和化妆品购物网站:Arenal Perfumerías
2019/03/01 全球购物
New Balance德国官方网站:购买鞋子和服装
2019/08/31 全球购物
小学运动会演讲稿
2014/08/25 职场文书
2014企业领导班子四风对照检查材料思想汇报
2014/09/17 职场文书
北京英语导游词
2015/02/12 职场文书
《作风建设永远在路上》心得体会
2016/01/21 职场文书
智慧人生:永远不需要向任何人解释你自己
2019/08/20 职场文书