js前端实现图片懒加载(lazyload)的两种方式


Posted in Javascript onApril 24, 2017

在实际的项目开发中,我们通常会遇见这样的场景:一个页面有很多图片,而首屏出现的图片大概就一两张,那么我们还要一次性把所有图片都加载出来吗?显然这是愚蠢的,不仅影响页面渲染速度,还浪费带宽。这也就是们通常所说的首屏加载,技术上现实其中要用的技术就是图片懒加载--到可视区域再加载。

思路:

将页面里所有img属性src属性用data-xx代替,当页面滚动直至此图片出现在可视区域时,用js取到该图片的data-xx的值赋给src。

关于各种宽高:

  1. 页可见区域宽: document.body.clientWidth;
  2. 网页可见区域高: document.body.clientHeight;
  3. 网页可见区域宽: document.body.offsetWidth (包括边线的宽);
  4. 网页可见区域高: document.body.offsetHeight (包括边线的宽);
  5. 网页正文全文宽: document.body.scrollWidth;
  6. 网页正文全文高: document.body.scrollHeight;
  7. 网页被卷去的高: document.body.scrollTop;
  8. 网页被卷去的左: document.body.scrollLeft;
  9. 网页正文部分上: window.screenTop;
  10. 网页正文部分左: window.screenLeft;
  11. 屏幕分辨率的高: window.screen.height;
  12. 屏幕分辨率的宽: window.screen.width;
  13. 屏幕可用工作区高度: window.screen.availHeight;

示例:

jqueryLazyload方式

下载地址:https://github.com/helijun/helijun/blob/master/plugin/lazyLoad/jquery.lazyload.js

<section class="module-section" id="container">
   <img class="lazy-load" data-original="../static/img/loveLetter/teacher/teacher1.jpg" width="640" height="480" alt="测试懒加载图片"/>
</section>
require.config({
  baseUrl : "/static",
  paths: {
    jquery:'component/jquery/jquery-3.1.0.min'
    jqueryLazyload: 'component/lazyLoad/jquery.lazyload',//图片懒加载
  },
  shim: {
    jqueryLazyload: {
      deps: ['jquery'],
      exports: '$'
    }
  }
});
require(
  [
    'jquery',
    'jqueryLazyload'
  ], 
  function($){
    $(document).ready(function() {   
      $("img.lazy-load").lazyload({ 




effect : "fadeIn", //渐现,show(直接显示),fadeIn(淡入),slideDown(下拉)





threshold : 180, //预加载,在图片距离屏幕180px时提前载入





event: 'click', // 事件触发时才加载,click(点击),mouseover(鼠标划过),sporty(运动的),默认为scroll(滑动)





container: $("#container"), // 指定对某容器中的图片实现效果





failure_limit:2 //加载2张可见区域外的图片,lazyload默认在找到第一张不在可见区域里的图片时则不再继续加载,但当HTML容器混乱的时候可能出现可见区域内图片并没加载出来的情况




}); 



});

});

为了代码可读性,属性值我都写好了注释。值得注意的是预制图片属性为data-original,并且最好是给予初始高宽占位,以免影响布局,当然这里为了演示我是写死的640x480,如果是响应式页面,高宽需要动态计算。

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指向的是真正的图片地址。

 总结:

两者都非常简单,实现思路是一样的,只是jquerylazyload多几个属性。其实常用的echo就足够了,并且完全可以集成到自己项目中的公共js中,图片懒加载是相当常见且简单实用的功能,如果你的项目中还是傻瓜式的一次性全部加载,那么请花20分钟优化下~

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

Javascript 相关文章推荐
Jquery 实现表格颜色交替变化鼠标移过颜色变化实例
Aug 28 Javascript
jQuery调取jSon数据并展示的方法
Jan 29 Javascript
javascript 实现map集合
Apr 03 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
Apr 20 Javascript
JQuery EasyUI学习教程之datagrid 添加、修改、删除操作
Jul 09 Javascript
微信小程序之数据缓存的实例详解
Sep 29 Javascript
原生js实现移动端触摸轮播的示例代码
Dec 22 Javascript
js 数组详细操作方法及解析合集
Jun 01 Javascript
layDate插件设置开始和结束时间
Nov 15 Javascript
bootstrap-table实现表头固定以及列固定的方法示例
Mar 07 Javascript
详解Vue.js和layui日期控件冲突问题解决办法
Jul 25 Javascript
一文了解JavaScript用Element Traversal新属性遍历子元素
Nov 27 Javascript
angularjs中的$eval方法详解
Apr 24 #Javascript
浅谈angularjs依赖服务注入写法的注意点
Apr 24 #Javascript
angularjs中回车键触发某一事件的方法
Apr 24 #Javascript
浅谈angularjs中响应回车事件
Apr 24 #Javascript
老生常谈angularjs中的$state.go
Apr 24 #Javascript
使用ionic播放轮询广告的实现方法(必看)
Apr 24 #Javascript
详谈angularjs中路由页面强制更新的问题
Apr 24 #Javascript
You might like
php初始化对象和析构函数的简单实例
2014/03/11 PHP
十幅图告诉你什么是PHP引用
2015/02/22 PHP
Linux php 中文乱码的快速解决方法
2016/05/13 PHP
详解PHP防止直接访问.php 文件的实现方法
2017/07/28 PHP
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
2012/03/14 Javascript
浅谈Javascript事件处理程序的几种方式
2012/06/27 Javascript
你必须知道的JavaScript 变量命名规则详解
2013/05/07 Javascript
js函数在frame中的相互调用详解
2014/03/03 Javascript
jquery动态调整div大小使其宽度始终为浏览器宽度
2014/06/06 Javascript
详谈javascript中的cookie
2015/06/03 Javascript
jquery左右全屏大尺寸多图滑动效果代码分享
2015/08/28 Javascript
微信小程序 实现tabs选项卡效果实例代码
2016/10/31 Javascript
微信小程序实现跑马灯效果
2020/10/21 Javascript
详解Vue前端生产环境发布配置实战篇
2019/05/07 Javascript
javascript实现遮罩层动态效果实例
2019/05/14 Javascript
python用pickle模块实现“增删改查”的简易功能
2017/06/07 Python
Python探索之静态方法和类方法的区别详解
2017/10/27 Python
Windows下安装Django框架的方法简明教程
2018/03/28 Python
Python-OpenCV基本操作方法详解
2018/04/02 Python
mac下pycharm设置python版本的图文教程
2018/06/13 Python
Window环境下Scrapy开发环境搭建
2018/11/18 Python
Python实现深度遍历和广度遍历的方法
2019/01/22 Python
Python实现的合并两个有序数组算法示例
2019/03/04 Python
解决python中显示图片的plt.imshow plt.show()内存泄漏问题
2020/04/24 Python
CSS3中31种选择器使用方法教程
2013/12/05 HTML / CSS
宣传活动总结范文
2014/07/01 职场文书
美德少年事迹材料500字
2014/08/19 职场文书
关于青春的演讲稿三分钟
2014/08/22 职场文书
干部作风整顿自我剖析材料和整改措施
2014/09/18 职场文书
安全隐患整改报告
2014/11/06 职场文书
2015年个人现实表现材料
2014/12/10 职场文书
幼儿园安全工作总结2015
2015/04/20 职场文书
人口与计划生育责任书
2015/05/09 职场文书
小学六一主持词开场白
2015/05/28 职场文书
公司员工培训管理制度
2015/08/04 职场文书
vue实现登陆页面开发实践
2022/05/30 Vue.js