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 相关文章推荐
ArrayList类(增强版)
Apr 04 Javascript
用正则表达式 动态创建/增加css style script 兼容IE firefox
Mar 10 Javascript
jquery判断checkbox(复选框)是否被选中的代码
Oct 20 Javascript
CSS和JS标签style属性对照表(方便js开发的朋友)
Nov 11 Javascript
Javascript基础教程之比较操作符
Jan 18 Javascript
js实现鼠标感应向下滑动隐藏菜单的方法
Feb 20 Javascript
JavaScript中的编码和解码函数
Feb 15 Javascript
微信小程序movable view移动图片和双指缩放实例代码
Aug 08 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
Aug 19 Javascript
vue实现微信分享功能
Nov 28 Javascript
axios异步提交表单数据的几种方法
Aug 11 Javascript
vue+element UI实现树形表格
Dec 29 Vue.js
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代码包装修正版
2008/03/15 PHP
thinkPHP5.0框架事务处理操作简单示例
2018/09/07 PHP
PDO::commit讲解
2019/01/27 PHP
使用正则替换变量
2007/05/05 Javascript
JavaScript 关键字屏蔽实现函数
2009/08/02 Javascript
提交表单时执行func方法实现代码
2013/03/17 Javascript
js中点击空白区域时文本框与隐藏层的显示与影藏问题
2013/08/26 Javascript
Javascript表格翻页效果的具体实现
2013/10/05 Javascript
js函数返回多个返回值的示例代码
2013/11/05 Javascript
js获取客户端外网ip的简单实例
2013/11/21 Javascript
浅析IE10兼容性问题(frameset的cols属性)
2014/01/03 Javascript
复制网页内容,粘贴之后自动加上网址的实现方法(脚本之家特别整理)
2014/10/16 Javascript
javascript数组排序汇总
2015/07/07 Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
2016/01/08 Javascript
javascript解决小数的加减乘除精度丢失的方案
2016/05/31 Javascript
ReactJs快速入门教程(精华版)
2016/11/28 Javascript
JS获得一个对象的所有属性和方法实例
2017/02/21 Javascript
详解vue-cli + webpack 多页面实例配置优化方法
2017/07/13 Javascript
使用JavaScript实现一个小程序之99乘法表
2017/09/21 Javascript
微信小程序实现顶部下拉菜单栏
2018/11/04 Javascript
微信小程序利用button控制条件标签的变量问题
2020/03/15 Javascript
ES5 模拟 ES6 的 Symbol 实现私有成员功能示例
2020/05/06 Javascript
[02:23]2014DOTA2国际邀请赛中国战队回顾
2014/08/01 DOTA
[55:45]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第一局
2016/02/28 DOTA
用python删除java文件头上版权信息的方法
2014/07/31 Python
详解duck typing鸭子类型程序设计与Python的实现示例
2016/06/03 Python
PyQt5 在label显示的图片中绘制矩形的方法
2019/06/17 Python
详解Django将秒转换为xx天xx时xx分
2019/09/27 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
2020/05/27 Python
Python调用C/C++的方法解析
2020/08/05 Python
2014年销售人员工作总结
2014/11/27 职场文书
小学班主任评语
2014/12/29 职场文书
三八妇女节慰问信
2015/02/14 职场文书
预备党员的思想汇报,你真的会写吗?
2019/06/28 职场文书
手把手教你制定暑期学习计划,让你度过充实的暑假
2019/08/22 职场文书
关于JavaScript回调函数的深入理解
2021/06/27 Javascript