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的防止大图片撑破页面的实现代码(立即缩放)
Oct 24 Javascript
Javascript的数组与字典用法与遍历对象的属性技巧
Nov 07 Javascript
GridView中获取被点击行中的DropDownList和TextBox中的值
Jul 18 Javascript
javascript full screen 全屏显示页面元素的方法
Sep 27 Javascript
JS实现两个大数(整数)相乘
Apr 28 Javascript
更高效的使用JQuery 这里总结了8个小技巧
Apr 13 Javascript
Vue.js 2.0窥探之Virtual DOM到底是什么?
Feb 10 Javascript
Vue.js2.0中的变化小结
Oct 24 Javascript
浅谈Vue SSR 的 Cookies 问题
Nov 20 Javascript
微信小程序实现滴滴导航tab切换效果
Jul 24 Javascript
JavaScript 斐波那契数列 倒序输出 输出100以内的质数代码实例
Sep 11 Javascript
js基础语法与maven项目配置教程案例
Jul 15 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框架codeigniter中如何使用框架的session
2013/06/24 PHP
is_uploaded_file函数引发的不能上传文件问题
2013/10/29 PHP
JQuery最佳实践之精妙的自定义事件
2010/08/11 Javascript
ASP中Sub和Function的区别说明
2020/08/30 Javascript
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
用dtree实现树形菜单 dtree使用说明
2011/10/17 Javascript
解析js如何获取当前url中的参数值并复制给input
2013/06/23 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
2014/09/02 Javascript
js简单实现标签云效果实例
2015/08/06 Javascript
移动端效果之IndexList详解
2017/10/20 Javascript
webpack 样式加载的实现原理
2018/06/12 Javascript
vue定义全局变量和全局方法的方法示例
2018/08/01 Javascript
vue的全局变量和全局拦截请求器的示例代码
2018/09/13 Javascript
使用JS监听键盘按下事件(keydown event)
2019/11/07 Javascript
vue.js 子组件无法获取父组件store值的解决方式
2019/11/08 Javascript
JS Array.from()将伪数组转换成数组的方法示例
2020/03/23 Javascript
原生JavaScript写出Tabs标签页的实例代码
2020/07/20 Javascript
解决vue 给window添加和移除resize事件遇到的坑
2020/07/21 Javascript
python实现逆波兰计算表达式实例详解
2015/05/06 Python
python爬取51job中hr的邮箱
2016/05/14 Python
python中range()与xrange()用法分析
2016/09/21 Python
python实现机器学习之多元线性回归
2018/09/06 Python
pybind11和numpy进行交互的方法
2019/07/04 Python
django之导入并执行自定义的函数模块图解
2020/04/01 Python
Bluebella美国官网:英国性感内衣品牌
2018/10/04 全球购物
Shein英国:女性时尚网上商店
2019/04/10 全球购物
JD Sports澳洲官网:英国领先的运动鞋和运动时尚零售商
2020/02/15 全球购物
公司年会晚宴演讲稿
2014/01/06 职场文书
给国外客户的邀请函
2014/01/30 职场文书
视光学毕业生自荐书范文
2014/02/13 职场文书
大学生会计职业生涯规划范文
2014/02/28 职场文书
遵纪守法演讲稿
2014/05/23 职场文书
消防安全标语
2014/06/07 职场文书
2015暑假社会调查报告
2015/07/13 职场文书
旅行社计调工作总结
2015/08/12 职场文书
队列队形口号
2015/12/25 职场文书