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 相关文章推荐
jQuery 全选效果实现代码
Mar 23 Javascript
非常强大的 jQuery.AsyncBox 弹出对话框插件
Aug 29 Javascript
获取body标签的两种方法
Oct 13 Javascript
JavaScript中字面量与函数的基本使用知识
Oct 20 Javascript
js实现图片上传并正常显示
Dec 19 Javascript
jQuery事件绑定用法详解(附bind和live的区别)
Jan 19 Javascript
JSONP原理及简单实现
Jun 08 Javascript
利用JS实现数字增长
Jul 28 Javascript
vue省市区三联动下拉选择组件的实现
Apr 28 Javascript
Vue表单demo v-model双向绑定问题
Jun 29 Javascript
vue.js中proxyTable 转发请求的实现方法
Sep 20 Javascript
element-ui table组件如何使用render属性的实现
Nov 04 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和ACCESS写聊天室(二)
2006/10/09 PHP
全世界最小的php网页木马一枚 附PHP木马的防范方法
2009/10/09 PHP
ThinkPHP实现二级循环读取的方法
2014/11/03 PHP
thinkPHP学习笔记之安装配置篇
2015/03/05 PHP
PHP Opcache安装和配置方法介绍
2015/05/28 PHP
php分割合并两个字符串的函数实例
2015/06/19 PHP
thinkPHP5.0框架简单配置作用域的方法
2017/03/17 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
基于jquery的划词搜索实现(备忘)
2010/09/14 Javascript
非常有用的40款jQuery 插件推荐(系列二)
2011/12/25 Javascript
javascript随机将第一个dom中的图片添加到第二个div中示例
2013/10/08 Javascript
原生JS获取元素集合的子元素宽度实例
2016/12/14 Javascript
jquery仿京东侧边栏导航效果
2017/03/02 Javascript
详解Vue-axios 设置请求头问题
2018/12/06 Javascript
React组件对子组件children进行加强的方法
2019/06/23 Javascript
javascript实现简单打字游戏
2019/10/29 Javascript
vue+elementUI动态增加表单项并添加验证的代码详解
2020/12/17 Vue.js
python 读写excel文件操作示例【附源码下载】
2019/06/19 Python
Python 中的参数传递、返回值、浅拷贝、深拷贝
2019/06/25 Python
Python实现字符串中某个字母的替代功能
2019/10/21 Python
Python生成个性签名图片获取GUI过程解析
2019/12/16 Python
python 识别登录验证码图片功能的实现代码(完整代码)
2020/07/03 Python
加拿大健康、婴儿和美容产品在线购物:Well.ca
2016/11/30 全球购物
Swisse官方海外旗舰店:澳大利亚销量领先,自然健康品牌
2017/12/15 全球购物
美国男士内衣品牌:Tommy John
2017/12/22 全球购物
联想香港官方网站及网店:Lenovo香港
2018/04/13 全球购物
Fabletics官网:美国运动服饰品牌,由好莱坞女演员凯特·哈德森创立
2019/10/19 全球购物
应届生骨科医生求职信
2013/10/31 职场文书
给同事的道歉信
2014/01/11 职场文书
科研课题实施方案
2014/03/18 职场文书
继承权公证书范本
2015/01/23 职场文书
2015年公司后勤管理工作总结
2015/05/13 职场文书
Nginx快速入门教程
2021/03/31 Servers
阿里云k8s服务升级时502错误 springboot项目应用
2022/04/09 Servers
win10壁纸在哪个文件夹 win10桌面背景图片文件位置分享
2022/08/05 数码科技