前言

功能参考饿了么的图片组件里的懒加载图片(地址)
想要实现在快滚动到底部的时候去动态加载图片,前面写到过的监听滚动条去做懒加载也可以做到,但是想用更优雅的写法来实现,即用本地占位图片来替换网络图片,当视图加载到占位图片的视图的时候,将占位图片替换成网络图片。
这样做的好处是当你开发一个图片量比较多的项目的时候,不必等所有的图片都加载完成了才能友好访问,可以直接加载当前可视区域里的图片,其他区域的内容可以等滚动到当前视图之前加载。这样可以提高网站的友好体验,不必等那个几秒加载完成。
那么,怎么能做到监听懒加载的视图到达可视区域呢?

已经有原生支持监听可是区域的功能了,它就是IntersectionObserver

IntersectionObserver

mdn
先查看兼容情况

目前绝大多数浏览器都支持的差不多了,除了ie(毕竟巨硬都放弃了)那就没必要考虑了吧!
上面的mdn里有介绍intersectionObserver有两个形参,一个是回调函数,第二个是可选的配置项;

  • 回调函数
    回调函数有两个形参,第一个是entries, entries是一个数组,每个成员都是一个IntersectionObserverEntry对象
    如果同时有两个被观察的对象的可见性发生变化,entries数组就会有两个成员;第二个参数是当前被调用的IntersectionObserver实例

  • 配置项
    root 详见mdn
    rootMargin 详见mdn
    threshold 重点说下threshold,它是一个具体的数值或者是一个数值的数组,值为0-1之间。0 代表视图即将加载到可视区域之前,而1则是视图(视图的高度)完完全全加载到可视区域了。没有修改配置的话 默认该项都是0,即马上就到可视区域了去触发回调。

实例

     <div class="banner"></div><div class="content"></div><div class="img"><span>loading</span></div><style>div, body, html {padding: 0;margin: 0;}.banner {width: 100%;height: 100vh;background-color: aqua;}.content {height: 200px;background-color: aquamarine;}.img {min-height: 300px;background-color: aliceblue;text-align: center;}.img>span {line-height: 300px;font-size: 50px;}</style><script>const img = document.querySelector('.img');const observer = new IntersectionObserver((e, self) => {console.log(e)const status = e.some(item => item.intersectionRatio > 0);if (status) {createImgEle();if (e.some(el => el.target === img)) self.unobserve(img)}}, {threshold: 0})observer.observe(img);function createImgEle() {const imgctx = document.createElement('img');const loading = document.querySelector('.img>span');imgctx.src = 'https://img2.baidu.com/it/u=4084621093,2971972319&fm=253&fmt=auto&app=120&f=JPEG?w=889&h=500';img.append(imgctx);img.removeChild(loading)}</script>

这里以懒加载一张图片为例,当加载到div.img时会执行callback回调 去生成一个新的img元素(其实一开始是打算不创建img 只替换img.src的,但没有找到那张Loading图片,就手动创建了个img来替换。。。)

更高级的用法比如注册成vue的自定义指令(感谢春神提供的素材)

【懒加载】监听视图是否到达可视区域相关推荐

  1. android动画超出圆角,Android关于Glide的使用(高斯模糊、加载监听、圆角图片)

    高斯模糊.加载监听.圆角图片这些相信大家都很熟悉,那如何实现这些效果,请大家参考本文进行学习. 1.引用 compile 'com.github.bumptech.glide:glide:3.7.0' ...

  2. Oracle 外部表加载监听日志,使用外部表访问监听日志

    某天工作是使用外部表加载监听日志信息,观察并分析用户连接数变化趋势 按照eygle循序渐进oracle的教程一步步进行: 测试使用外部表先创建目录: connect  / as sysdba crea ...

  3. js - 预加载+监听图片资源加载制作进度条

    这两天遇到一个新需求:一个一镜到底的h5动画.因为功能的特殊性,就要求我们提前监听页面的静态图片是否全部加载完毕.即处理预加载. 总结下来,下次这种需求需要提前注意以下几点: 一.图片而不是背景图 本 ...

  4. 聊一聊前端图片懒加载背后的故事

    本文内容 什么是懒加载 如何实现懒加载 监听滚动事件 IntersectionObserver 浏览器原生方案 本文小结 相信大家已经注意到我博客有了一点变化,因为博主最近利用空闲时间对博客进行了优化 ...

  5. 图片懒加载及Vue自定义图片懒加载指令

    文章目录 监听滚动的方式 IntersectionObserver方式 自定义图片懒加载vue指令1 自定义图片懒加载vue指令2 lazyLoadImage.js main.js中注册指令 组件中使 ...

  6. 图片懒加载 lazyload

    目录 了解 代码 效果 了解 图片懒加载是一种网页性能优化的方法,能够极大的提升用户的体验效果,现代一张图片都有可能是几兆的问题,加入100张图片你进入页面难道就直接全部请求,这得要多卡,所以使用图片 ...

  7. Vue3电商项目实战-首页模块7【26-首页主体-商品区块、27-首页主体-最新专题、28-首页主体-图片懒加载】

    文章目录 26-首页主体-商品区块 27-首页主体-最新专题 28-首页主体-图片懒加载 26-首页主体-商品区块 目的: 完成商品区域展示. 大致步骤: 准备一个商品盒子组件 home-goods ...

  8. js图片懒加载原理、实现及节流优化

    1.懒加载原理 在图片没有进入可视区域时,先给的src一个默认加载的图片,这样浏览器就不会发送请求了,等到图片进入可视区域再把真实的图片路径data-src给src. 2.具体实现 1. 效果 2. ...

  9. 【Web技术】1206- 如何设计一款支持懒加载的瀑布流组件?

    前言 瀑布流布局算是一种比较流行的布局,参差不齐的多列结构,不仅能节省空间,还能在视觉展示上错落有致不拘一格.在一次业务需求中,找了几个开源的瀑布流组件,在使用的过程中总会有点小问题,便开发了此组件. ...

最新文章

  1. 访问数据库_如何访问虚拟主机中的数据库
  2. 《云计算:概念、技术与架构》一2.3 案例研究3:Innovartus
  3. Unity3D 自定义数据格式
  4. python 循环语句结果存储_Python条件语句和循环语句
  5. 假如生活欺骗了你!——Leo网上答疑(14)
  6. C/C++实现删除字符串的首尾空格
  7. android硬件加速器及其问题小结
  8. [ZJOI2007][BZOJ1059] 矩阵游戏|二分图匹配|匈牙利算法
  9. 编译器的不同,导致运行结果不一样
  10. 随机森林matlab实现
  11. compoundbutton(compoundbutton是什么意思)
  12. 变分自编码(VAE)及代码解读
  13. 小猪的Python学习之旅 —— 14.项目实战:抓取豆瓣音乐Top 250数据存到Excel中
  14. MDXMondrian介绍
  15. Mysql数据库使用规范
  16. Windows11原版镜像
  17. 一种获取NLP语料的基本方法
  18. android基础知识13:AndroidManifest.xml文件解析【转载】
  19. 优麒麟mysql_如何在优麒麟Ubuntu Kylin下安装Numix主题和图标
  20. LHS与RHS查询(已完结)

热门文章

  1. 坚鹏现场录制视频课程——招商银行数字化转型案例研究
  2. Unity3D实现飞行模式#2,提升高度
  3. 图像的频域--学习笔记
  4. 深度学习 --- 循环神经网络RNN详解(BPTT)
  5. c语言char197用%d输出变为-59,强制类型转换所导致的数据改变
  6. 微信小程序反编译wxss文件缺失_如何找回微信小程序源码?2019年微信小程序反编译最新教程...
  7. 松下伺服 报警代码40
  8. windows系统多网口如何指定出口IP
  9. 数据结构:status函数类型
  10. 软考高级之信息系统案例分析七重奏-《2》