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语句可以不以;结尾的烦恼
Mar 08 Javascript
Mootools 1.2教程 输入过滤第一部分(数字)
Sep 15 Javascript
JS实现仿京东淘宝竖排二级导航
Dec 08 Javascript
简单分析javascript面向对象与原型
May 21 Javascript
jQuery实现带水平滑杆的焦点图动画插件
Mar 08 Javascript
酷炫jQuery全屏3D焦点图动画效果
Mar 22 Javascript
bootstrap响应式表格实例详解
May 15 Javascript
基于Node.js模板引擎教程-jade速学与实战1
Sep 17 Javascript
微信小程序实现鼠标拖动效果示例
Dec 01 Javascript
vue init失败简单解决方法(终极版)
Dec 22 Javascript
在vue项目中使用element-ui的Upload上传组件的示例
Feb 08 Javascript
微信小程序实现图片上传放大预览删除代码
Jun 28 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 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
2010/10/22 PHP
PHP操作Memcache实例介绍
2013/06/14 PHP
php输出金字塔的2种实现方法
2014/12/16 PHP
PHP合并数组+号和array_merge的区别
2015/06/25 PHP
curl 出现错误的调试方法(必看)
2017/02/13 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
2018/10/14 PHP
PHP程序员简单的开展服务治理架构操作详解(二)
2020/05/14 PHP
用javascript做拖动布局的思路
2008/05/31 Javascript
JS获取页面input控件中所有text控件并追加样式属性
2013/02/25 Javascript
dwz 如何去掉ajaxloading具体代码
2013/05/22 Javascript
JavaScript中逗号运算符介绍及使用示例
2015/03/13 Javascript
JavaScript的事件代理和委托实例分析
2015/03/25 Javascript
JavaScript实现in-place思想的快速排序方法
2016/08/07 Javascript
jQuery的图片轮播插件PgwSlideshow使用详解
2016/08/11 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
基于BootStrap的文本编辑器组件Summernote
2017/10/27 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
2018/02/22 Javascript
Node.js 使用AngularJS的方法示例
2018/05/11 Javascript
详解create-react-app 自定义 eslint 配置
2018/06/07 Javascript
php中and 和 &amp;&amp;出坑指南
2018/07/13 Javascript
jQuery实现网页拼图游戏
2020/04/22 jQuery
vue实现随机验证码功能的实例代码
2019/04/30 Javascript
微信小程序开发搜索功能实现(前端+后端+数据库)
2020/03/04 Javascript
[56:29]Secret vs Optic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python中urllib+urllib2+cookielib模块编写爬虫实战
2016/01/20 Python
Python的包管理器pip更换软件源的方法详解
2016/06/20 Python
Django 全局的static和templates的使用详解
2019/07/19 Python
python中time、datetime模块的使用
2020/12/14 Python
波兰办公用品和学校用品在线商店:Dlabiura24.pl
2020/11/18 全球购物
策划助理岗位职责
2013/11/18 职场文书
媒体宣传策划方案
2014/05/25 职场文书
劳模先进事迹材料
2014/12/24 职场文书
在校证明模板
2015/06/17 职场文书
2016年小学感恩节活动总结
2016/04/01 职场文书
java后台调用接口及处理跨域问题的解决
2022/03/24 Java/Android