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弹簧振子超简洁版 完全符合能量守恒,胡克定理
Oct 25 Javascript
javascript showModalDialog 多层模态窗口实现页面提交及刷新的代码
Nov 28 Javascript
理解Javascript_14_函数形式参数与arguments
Oct 20 Javascript
json对象转字符串如何实现
Dec 02 Javascript
JS中引用百度地图并将百度地图的logo和信息去掉
Sep 29 Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
Feb 15 Javascript
AngularJS封装指令方法详解
Dec 12 Javascript
Bootstrap导航简单实现代码
Mar 06 Javascript
bootstrap table实现点击翻页功能 可记录上下页选中的行
Sep 28 Javascript
一文了解vue-router之hash模式和history模式
May 31 Javascript
JS操作字符串转数字的常见方法示例
Oct 29 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
Dec 29 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
php swoft框架实例用法
2020/12/22 PHP
JavaScript在IE中“意外地调用了方法或属性访问”
2008/11/19 Javascript
Jquery 高亮显示文本中重要的关键字
2009/12/24 Javascript
IE8下关于querySelectorAll()的问题
2010/05/13 Javascript
在表单提交前进行验证的几种方式整理
2013/07/31 Javascript
使图片旋转的3种解决方案
2013/11/21 Javascript
Node.js中调用mysql存储过程示例
2014/12/20 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
2016/01/08 Javascript
JS中innerHTML和pasteHTML的区别实例分析
2016/06/22 Javascript
EasyUI 结合JS导出Excel文件的实现方法
2016/11/10 Javascript
jQuery事件与动画基础详解
2017/02/23 Javascript
JavaScript之filter_动力节点Java学院整理
2017/06/28 Javascript
JS实现按钮控制计时开始和停止功能
2017/07/27 Javascript
JS实现数组的增删改查操作示例
2018/08/29 Javascript
解决vue中虚拟dom,无法实时更新的问题
2018/09/15 Javascript
Vue项目history模式下微信分享爬坑总结
2019/03/29 Javascript
《javascript设计模式》学习笔记五:Javascript面向对象程序设计工厂模式实例分析
2020/04/08 Javascript
python rsa 加密解密
2017/03/20 Python
python 发送json数据操作实例分析
2019/10/15 Python
Python使用pymysql模块操作mysql增删改查实例分析
2019/12/19 Python
python zip()函数的使用示例
2020/09/23 Python
国际知名设计师时装商店:Coggles
2016/09/05 全球购物
eBay加拿大站:eBay.ca
2019/06/20 全球购物
String这个类型的class为何定义成final?
2012/11/13 面试题
计算机工程学院个人求职信
2013/10/05 职场文书
求职简历推荐信范文
2013/12/02 职场文书
部队学习十八大感言
2014/01/11 职场文书
群众路线教育党课主持词
2014/04/01 职场文书
安全演讲稿大全
2014/05/09 职场文书
公共场所禁烟标语
2014/06/25 职场文书
毕业生找工作求职信
2014/08/05 职场文书
初中教师个人工作总结
2015/02/10 职场文书
Django 如何实现文件上传下载
2021/04/08 Python
如何利用Python实现一个论文降重工具
2021/07/09 Python
MySQL数据库Innodb 引擎实现mvcc锁
2022/05/06 MySQL
python 判断字符串当中是否包含字符(str.contain)
2022/06/01 Python