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 相关文章推荐
jQuery DOM操作小结与实例
Jan 07 Javascript
JavaScript DOM 学习第九章 选取范围的介绍
Feb 19 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
Feb 12 Javascript
判断及设置浏览器全屏模式
Apr 20 Javascript
Javascript正则控制文本框只能输入整数或浮点数
Sep 02 Javascript
一波JavaScript日期判断脚本分享
Mar 06 Javascript
jQueryUI中的datepicker使用方法详解
May 25 Javascript
AngularJS中过滤器的使用与自定义实例代码
Sep 17 Javascript
WEB前端实现裁剪上传图片功能
Oct 17 Javascript
jQuery替换节点元素的操作方法
Mar 18 jQuery
js module大战
Apr 19 Javascript
在layui中select更改后生效的方法
Sep 05 Javascript
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
PHP下通过file_get_contents的代理使用方法
2011/02/16 PHP
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
2014/11/11 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
2018/04/30 PHP
微信公众平台开发教程⑥ 微信开发集成类的使用图文详解
2019/04/10 PHP
js GridView 实现自动计算操作代码
2009/03/25 Javascript
js修改input的type属性及浏览器兼容问题探讨与解决
2013/01/23 Javascript
jQuery 网易相册鼠标移动显示隐藏效果实现代码
2013/03/31 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
javascript与jquery中的this关键字用法实例分析
2015/12/24 Javascript
jQuery学习心得总结(必看篇)
2016/06/10 Javascript
javascript与jquery动态创建html元素示例
2016/07/25 Javascript
基于JavaScript表单脚本(详解)
2017/10/18 Javascript
layui实现checkbox的目录树tree的例子
2019/09/12 Javascript
JavaScript变量基本使用方法实例分析
2019/11/15 Javascript
JS自定义滚动条效果
2020/03/13 Javascript
[03:56]还原FTP电影首映式 DOTA2群星拼出遗迹世界
2014/03/26 DOTA
python @property的用法及含义全面解析
2018/02/01 Python
django Admin文档生成器使用详解
2019/07/22 Python
Django表单提交后实现获取相同name的不同value值
2020/05/14 Python
用css3制作纸张效果(外翻卷角)
2013/02/01 HTML / CSS
丝芙兰巴西官方商城:SEPHORA巴西
2016/10/31 全球购物
Helly Hansen工作服美国官方网上商店:为最恶劣的环境
2019/09/04 全球购物
应届毕业生自我鉴定范文
2013/12/27 职场文书
俄语专业职业生涯规划
2014/02/26 职场文书
正科级干部考察材料
2014/05/29 职场文书
道路交通事故人身损害赔偿协议书
2014/11/19 职场文书
求职信范文怎么写
2015/03/19 职场文书
2015年爱牙日活动总结
2015/03/23 职场文书
比赛主持人开场白
2015/05/29 职场文书
会议简讯范文
2015/07/20 职场文书
信息技术国培研修日志
2015/11/13 职场文书
2019最新版劳务派遣管理制度
2019/08/16 职场文书
分析MySQL抛出异常的几种常见解决方式
2021/05/18 MySQL
Python 类,对象,数据分类,函数参数传递详解
2021/09/25 Python
Python与C++中梯度方向直方图的实现
2022/03/17 Python
python对文档中元素删除,替换操作
2022/04/02 Python