JS图片懒加载的优点及实现原理


Posted in Javascript onJanuary 10, 2020

这篇文章主要介绍了JS图片懒加载的优点及实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

图片懒加载优势:

增强用户体验

  • 优化代码
  • 减少http的请求
  • 减少服务器端压力
  • 服务器的按需加载

图片懒加载原理:

先将图片的src设置为同一张图片或者不设置,同时给img标签设置一个特殊属性,例如:data-src用于存放图片的真实预览地址;若图片未进入可视区域时,展示同一张图片或者直接不展示图片,此时就不会发生http请求,当图片进入可视区域时,将data-src上的值赋给src,此时再发送http请求。

关键:判断图片是否进入到可视区域(关键函数)

  •  页可见区域宽: document.body.clientWidth;
  •  网页可见区域高: document.body.clientHeight;
  •  网页可见区域宽: document.body.offsetWidth (包括边线的宽);
  •  网页可见区域高: document.body.offsetHeight (包括边线的宽);
  •  网页正文全文宽: document.body.scrollWidth;
  •  网页正文全文高: document.body.scrollHeight;
  •  网页被卷去的高: document.body.scrollTop;
  •  网页被卷去的左: document.body.scrollLeft;
  •  网页正文部分上: window.screenTop;
  •  网页正文部分左: window.screenLeft;
  •  屏幕分辨率的高: window.screen.height;
  •  屏幕分辨率的宽: window.screen.width;
  •  屏幕可用工作区高度: window.screen.availHeight;
  •  当前元素相对于其 offsetParent 元素的顶部的距离: HTMLElement.offsetTop;
  •  浏览器窗口的视口(viewport)高度(以像素为单位): window.innerHeight; (如果有水平滚动条,也包括滚动条高度)

代码实现

html部分

<div>
  <img src="./img/1.jpg" data-src="./img/1.jpg" alt="">
  <img src="./img/1.jpg" data-src="./img/2.jpg" alt="">
  <img src="./img/1.jpg" data-src="./img/3.jpg" alt="">
  <img src="./img/1.jpg" data-src="./img/4.jpg" alt="">
  <img src="./img/1.jpg" data-src="./img/5.jpg" alt="">
  <img src="./img/1.jpg" data-src="./img/6.jpg" alt="">
  <img src="./img/1.jpg" data-src="./img/7.jpg" alt="">
  <img src="./img/1.jpg" data-src="./img/8.jpg" alt="">
  <img src="./img/1.jpg" data-src="./img/9.jpg" alt="">
  <img src="./img/1.jpg" data-src="./img/10.jpg" alt="">
 </div>

js部分

window.onload = () => {
   // 获取某节点与浏览器顶部的距离
   function getTop(e) {
    if (!e) return
    return e.offsetTop
   }
   let imgs = document.getElementsByTagName('img')
   function lazyLoading(imgs) {
    // 可是区域高度
    let innerHeight = window.innerHeight;
    // 滚动区域高度
    let scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
    for (let i = 0; i < imgs.length; i++) {
     // 图片距离顶部的距离大于可视区域和滚动区域之和时加载
     if (scrollTop + innerHeight > getTop(imgs[i])) {
      imgs[i].src = imgs[i].getAttribute('data-src')
     }
    }
   }
   lazyLoading(imgs)
   window.onscroll = () => {
    lazyLoading(imgs)
   }
  }

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

Javascript 相关文章推荐
JavaScript 参考教程
Dec 29 Javascript
js下用eval生成JSON对象
Sep 17 Javascript
JQury slideToggle闪烁问题及解决办法
Jul 05 Javascript
file控件选择上传文件确定后触发的js事件是哪个
Mar 17 Javascript
jquery实现的鼠标拖动排序Li或Table
May 04 Javascript
javascript移动设备Web开发中对touch事件的封装实例
Jun 05 Javascript
无需 Flash 使用 jQuery 复制文字到剪贴板
Apr 26 Javascript
Nuxt.js开启SSR渲染的教程详解
Nov 30 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
Dec 24 Javascript
laypage+SpringMVC实现后端分页
Jul 27 Javascript
javascript 使用sleep函数的常见方法详解
Apr 26 Javascript
JavaScript中常用的3种弹出提示框(alert、confirm、prompt)
Nov 10 Javascript
jQuery操作元素的内容和样式完整实例分析
Jan 10 #jQuery
jquery选择器和属性对象的操作实例分析
Jan 10 #jQuery
js实现旋转木马轮播图效果
Jan 10 #Javascript
微信小程序新闻网站详情页实例代码
Jan 10 #Javascript
如何在Node和浏览器控制台中打印彩色文字
Jan 09 #Javascript
JavaScript复制变量三种方法实例详解
Jan 09 #Javascript
js实现左右轮播图
Jan 09 #Javascript
You might like
使用dump函数,给php加断点测试
2013/06/25 PHP
Yii2.0 模态弹出框+ajax提交表单
2016/05/22 PHP
laravel5创建service provider和facade的方法详解
2016/07/26 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
php微信开发之谷歌测距
2018/06/14 PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
2020/03/16 PHP
javascript StringBuilder类实现
2008/12/22 Javascript
JQuery 小练习(实例代码)
2009/08/07 Javascript
javascript实现时间格式输出FormatDate函数
2015/01/13 Javascript
7个去伪存真的JavaScript面试题
2016/01/07 Javascript
javascript html实现网页版日历代码
2016/03/08 Javascript
React.js入门学习第一篇
2016/03/30 Javascript
node.js连接mongoDB数据库 快速搭建自己的web服务
2016/04/17 Javascript
jQuery实现的导航下拉菜单效果
2016/07/04 Javascript
利用JS提交表单的几种方法和验证(必看篇)
2016/09/17 Javascript
给easyui的datebox控件添加清空按钮的实现方法
2016/11/09 Javascript
jQuery遍历节点方法汇总(推荐)
2017/05/13 jQuery
JS简单实现查看文档创建日期、修改日期和文档大小的方法示例
2018/04/08 Javascript
React diff算法的实现示例
2018/04/20 Javascript
JS实现的对象去重功能示例
2019/06/04 Javascript
详解vue 2.6 中 slot 的新用法
2019/07/09 Javascript
Python中类的定义、继承及使用对象实例详解
2015/04/30 Python
Python实现的简单算术游戏实例
2015/05/26 Python
Python中你应该知道的一些内置函数
2017/03/31 Python
python 实现tar文件压缩解压的实例详解
2017/08/20 Python
从请求到响应过程中django都做了哪些处理
2018/08/01 Python
django序列化serializers过程解析
2019/12/14 Python
HTML5验证以及日期显示的实现详解
2013/07/05 HTML / CSS
波兰电子产品购物网站:Vobis
2019/05/26 全球购物
SQL注入攻击的种类有哪些
2013/12/30 面试题
土木工程师岗位职责
2013/11/24 职场文书
海飞丝的广告词
2014/03/20 职场文书
员工工作自我评价
2014/09/26 职场文书
护士实习自荐信
2015/03/06 职场文书
2016年国培研修日志
2015/11/13 职场文书
如何用threejs实现实时多边形折射
2021/05/07 Javascript