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 相关文章推荐
点弹代码 点击页面任何位置都可以弹出页面效果代码
Sep 17 Javascript
javascript标签在页面中的位置探讨
Apr 11 Javascript
jQuery中delegate与on的用法与区别示例介绍
Dec 20 Javascript
jQuery中prev()方法用法实例
Jan 08 Javascript
JavaScript中exec函数用法实例分析
Jun 08 Javascript
基于React.js实现原生js拖拽效果引发的思考
Mar 30 Javascript
javascript实现去除HTML标签的方法
Dec 26 Javascript
深入理解Webpack 中路径的配置
Jun 17 Javascript
浅谈vue中改elementUI默认样式引发的static与assets的区别
Feb 03 Javascript
vue 下列表侧滑操作实例代码详解
Jul 24 Javascript
node.js使用express框架进行文件上传详解
Mar 03 Javascript
JS实现分页导航效果
Feb 19 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代码运行时间查看类代码分享
2011/08/06 PHP
destoon实现公司新闻详细页添加评论功能的方法
2014/07/15 PHP
PHP调用Linux命令权限不足问题解决方法
2015/02/07 PHP
php实现的简单数据库操作Model类
2016/11/16 PHP
Windows 下安装 swoole 图文教程(php)
2017/06/05 PHP
自己的js工具 Event封装
2009/08/21 Javascript
让IE6支持min-width和max-width的方法
2010/06/25 Javascript
js模仿windows桌面图标排列算法具体实现(附图)
2013/06/16 Javascript
jQuery function的正确书写方法
2013/08/02 Javascript
ajax请求乱码的解决方法(中文乱码)
2014/04/10 Javascript
jquery text()方法取标签中的文本
2014/07/25 Javascript
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
2015/01/01 NodeJs
完全深入学习Bootstrap表单
2016/11/28 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
2017/01/10 Javascript
基于Node.js的WebSocket通信实现
2017/03/11 Javascript
Vue原理剖析 实现双向绑定MVVM
2017/05/03 Javascript
Vue.js项目模板搭建图文教程
2017/09/20 Javascript
Vue使用自定义指令实现拖拽行为实例分析
2020/06/06 Javascript
[48:29]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS KG
2018/03/31 DOTA
python使用pymysql实现操作mysql
2016/09/13 Python
Python实现图片尺寸缩放脚本
2018/03/10 Python
python爬取网易云音乐评论
2018/11/16 Python
使用PyQt4 设置TextEdit背景的方法
2019/06/14 Python
Python函数中的可变长参数详解
2019/09/12 Python
Tensorflow的常用矩阵生成方式
2020/01/04 Python
Python实现爬取网页中动态加载的数据
2020/08/17 Python
J.Crew官网:美国知名休闲服装品牌
2017/05/19 全球购物
竞选演讲稿范文
2013/12/28 职场文书
运动会广播稿80字
2014/01/23 职场文书
消防安全检查制度
2014/02/04 职场文书
四年级科学教学反思
2014/02/10 职场文书
《金色的脚印》教后反思
2014/04/23 职场文书
导航工程专业自荐信
2014/09/02 职场文书
2014小学教师个人工作总结
2014/11/10 职场文书
仓库统计员岗位职责
2015/04/14 职场文书
Html5通过数据流方式播放视频的实现
2021/04/27 HTML / CSS