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 相关文章推荐
javascript中的prototype属性使用说明(函数功能扩展)
Aug 16 Javascript
兼容IE和Firefox的javascript获取iframe文档内容的函数
Aug 15 Javascript
模拟多级复选框效果的jquery代码
Aug 13 Javascript
在JavaScript中操作时间之getMonth()方法的使用
Jun 10 Javascript
浏览器兼容的JS写法总结
Apr 27 Javascript
JS组件Bootstrap Table布局详解
May 27 Javascript
老生常谈JavaScript数组的用法
Jun 10 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
Dec 07 Javascript
Node.js中的require.resolve方法使用简介
Apr 23 Javascript
基于rem的移动端响应式适配方案(详解)
Jul 07 Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
Apr 13 Javascript
JS代码实现页面切换效果
Jan 10 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
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
php恢复数组的key为数字序列的方法
2015/04/28 PHP
Apache无法自动跳转却显示目录的解决方法
2020/11/30 PHP
js 点击按钮弹出另一页,选择值后,返回到当前页
2010/05/26 Javascript
jQuery源码分析之Event事件分析
2010/06/07 Javascript
用JQuery实现全选与取消的两种简单方法
2014/02/22 Javascript
javascript瀑布流式图片懒加载实例
2020/06/28 Javascript
再次谈论React.js实现原生js拖拽效果引起的一系列问题
2016/04/03 Javascript
jQuery ajaxForm()的应用
2016/10/14 Javascript
教大家轻松制作Bootstrap漂亮表格(table)
2016/12/13 Javascript
Vuex之理解Store的用法
2017/04/19 Javascript
Angular 向组件传递模板的两种方法
2018/02/23 Javascript
微信提示 在浏览器打开 效果实现过程解析
2019/09/10 Javascript
使用pkg打包ThinkJS项目的方法步骤
2019/12/30 Javascript
Python操作MySQL简单实现方法
2015/01/26 Python
python使用reportlab实现图片转换成pdf的方法
2015/05/22 Python
python保存字符串到文件的方法
2015/07/01 Python
听歌识曲--用python实现一个音乐检索器的功能
2016/11/15 Python
Python实现Dijkstra算法
2018/10/17 Python
正则给header的冒号两边参数添加单引号(Python请求用)
2019/08/09 Python
PyTorch中反卷积的用法详解
2019/12/30 Python
Python 抓取数据存储到Redis中的操作
2020/07/16 Python
Python如何读写二进制数组数据
2020/08/01 Python
如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
2016/12/22 HTML / CSS
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
荷兰在线啤酒店:Beerwulf
2019/08/26 全球购物
化工机械应届生求职信
2013/11/04 职场文书
合同专员岗位职责
2013/12/18 职场文书
生物学学生自我评价
2014/01/17 职场文书
公务员政审单位鉴定材料
2014/05/16 职场文书
美术教师个人工作总结
2015/02/06 职场文书
敬老院活动感想
2015/08/07 职场文书
关于战胜挫折的名言警句大全!
2019/07/05 职场文书
详解Redis主从复制实践
2021/05/19 Redis
5行Python代码实现一键批量扣图
2021/06/29 Python
Python&Matlab实现灰狼优化算法的示例代码
2022/03/21 Python