微信小程序的生命周期概览

news2024/11/17 23:39:20

IntersectionObserver 用于监听元素是否进入视口(与视口是否存在相交),在图片懒加载等场景中被广泛应用,不过除了这个基础的用法,他还有更强大的能力。

使用场景

目前已知的 IntersectionObserver 常用使用场景包括:

  • 图片或其它内容的懒加载
  • 滚动加载
  • 判断用户是否能看见内容并作一些特定优化如停止动画、暂停视频等

其它的还有如用作广告是否出现在可视区域来判断是否计费等。

如何使用

要使用 IntersectionObserver 首先需要实例化一个 observer,然后通过调用它的 observe 来监听对应元素,元素在视口中的占比变化时会调用回调函数,默认情况下会在元素进入视口和脱离视口时触发。

const observer = new IntersectionObserver(callback, options);
observer.observe(target); 

回调中接收到的参数主要为 entriesobserverobserver 就是上面定义的 observer 的引用。因为一个 observer 可以 observe 多个元素,所以 entries 为数组:

const callback = entries => {entries.forEach(entry => {console.log(entry);});
}; 

解释下面 entry 属性前先讲下以下几个概念:

  • rootroot 为监视的相对元素,默认为浏览器视口,也可以自行设置
  • rectrect 为一个矩形定义,一般包含宽高、位置等信息,常见的有 getBoundingClientRect 获取元素的渲染矩形

entry 中主要包含一下几个属性:

  • boundingClientRect: 元素的 boundingClientReact,同 getBoundingClientRect 返回
  • intersectionRect: 元素进入 root 的部分的 rect
  • intersectionRatio: 元素的 intersectionRectboundingClientRect 的比例,可理解为相交部分的占比
  • isIntersecting: 元素与 root 是否有相交
  • rootBoundsroot 元素的 rect
  • target: 时间触发的目标元素,同 event.target
  • time: 回调触发的时间,注意不是时间戳而是相对于页面加载的 time origin 的时间差

options

options 包含三个可选参数:rootrootMarginthreshold,都有着很常见的用途:

root

设定监听的 root 元素,默认为浏览器视口,可自行定义。

rootMargin

设定视口的边距,值同 css margin,可以为 10px10px 20px 等格式,并且支持百分比。

通过 rootMargin,可以控制触发事件的边界距离。

threshold

设置阈值,可以是为单个值,也可以是数组 [0, 0.3, 1.0]

通过设置阈值,可以方便的控制事件的触发时机,不需要不停的判断元素进入的位置,也不需要额外做防抖节流等操作来优化性能。

其它 API

除了 observe 用于添加元素监听外,IntersectionObserver 还提供了以下几个 API

  • unobserve: 来解除元素的监听
  • disconnect: 关闭所有监听
  • takeRecords: 可获取 observer 下所有的元素最后触发的 entry

兼容与 polyfill

IntersectionObserver 的兼容性较佳,除了 IE 外基本主流浏览器都早已支持:

  • chrome 51
  • edge 15
  • firefox 55
  • opera 38
  • safari 12.1

如果要兼容可以使用 google chrome lib 提供的 polyfill:github.com/GoogleChrom…

问题

实际使用中发现 rootMargin 在使用中会存在一些问题,时间有限没有继续深入,此处记录后续更新。

总结

利用 IntersectionObserver 我们可以很方便的对元素是否展示、展示区域的大小、比例进行监听。

最后

为大家准备了一个前端资料包。包含54本,2.57G的前端相关电子书,《前端面试宝典(附答案和解析)》,难点、重点知识视频教程(全套)。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/70416.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jenkins-pipeline语法

Pipeline概念 Pipeline是将一个命令/程序/进程的输出发送到另一个命令/程序/进程,进行进一步处理 Pipeline的代码定义了整个构建过程 基本的Pipeline语法格式 声明式的pipeline语法格式 所有的声明都必须包含在pipeline{}中 块只能有节段,指令&#x…

AFT Impulse动态工具,AFT脉冲适用于工作

AFT Impulse动态工具,AFT脉冲适用于工作 AFT脉冲产品是一种强大的动态工具,用于计算低功率管道系统中的压力流量。设计用于液体系统,包括: 水 石油和产品被切割。 化学制品 冷冻剂 科洛尔。。。 AFT脉冲适用于工作: 珊瑚礁的大小和…

jdbc环境配置及操作步骤

文章目录jdbc环境配置jdbc 操作步骤jdbc 环境配置 jdbc开发,需要提前先准备驱动包(下载一个mysql驱动包)及配置(项目配置引入这个驱动包) 下载链接:mysql驱动包 注意:jar包的版本要和自己本地mysql版本一致 1.创建项…

使用宏基因组的方法快速鉴定新冠病毒SARS-CoV2

使用宏基因组的方法快速鉴定新冠病毒SARS-CoV2 一、如果不考虑成本,可以使用宏基因组测序的方法来快速鉴定新冠病毒SARS-CoV2,这种方法无需扩增、分析简单、准确度高。原理是直接将测序得到的序列数据与分类物种数据库比对,从而得到鉴定结果…

编程参考 - 如何计算字符串的哈希值

字符串的哈希值是什么? 在C,Java等编程语言中,有一种hashmap的数据结构,存储一对key / value,分别是两种对象。 为了加快存取的速度,键值key对象会被转换成一个hash值,一个整数。一般来讲&…

【权限提升】 Windows10 本地提权漏洞复现及详细分析(CVE-2021-1732)

文章目录声明一、漏洞前言二、漏洞描述三、漏洞原理四、漏洞以及EXP分析五、本地复现六、修复补丁声明 本篇文章仅用于技术研究和漏洞复现,切勿将文中涉及操作手法用于非授权下的渗透攻击行为,出现后果与本作者无关,切记!&#x…

Excel 中使用线性回归进行预测公司销售季节性与增长

本文将提供有关如何使用线性回归模型在 Microsoft Excel 中执行简单而强大的预测的分步教程。 我们将探索模型的三种变体,并比较特定单变量数据集的结果——产品在 5 年内的月销售额。三个模型变体将是; 原始线性回归 (LR) 模型。具有季节性的 LR 模型——确定特定月份的销售…

架构师知识体系梳理

文章目录1、架构师的职责和能力1.1 架构师的主要能力1.2 架构师的思维模式1.3 架构师具备的架构原则1.4 架构师深知的架构质量属性1.5 程序设计SOLID原则1.6 架构CAP定理1.7 领域驱动设计DDD2 搜索引擎2.1 系统架构2.2 原理篇2.3 常见问题2.4 质量保障3 分布式缓存架构3.1 系统…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java软件缺陷管理系统o255h

现在毕设刚开始。时间还有很多,可以从头开始学也可以。毕设其实不难,难的是我们懒散到这种时候再去静下心学。能自己独立完成尽量自己独立完成。相信你看过很多上面回答的,都不建议去某宝。毕竟这一行参差不齐哈。能找到靠谱的也不容易。近期…

[附源码]Python计算机毕业设计SSM计算机学院科研信息管理系统(程序+LW)

[附源码]Python计算机毕业设计SSM计算机学院科研信息管理系统(程序LW) 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。…

[附源码]计算机毕业设计JAVA志愿者管理系统论文2022

[附源码]计算机毕业设计JAVA志愿者管理系统论文2022 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM …

[附源码]Python计算机毕业设计SSM基于中职学校的校医务室管理系统(程序+LW)

[附源码]Python计算机毕业设计SSM基于中职学校的校医务室管理系统(程序LW) 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff0…

实现通过Jenkins api找到job构建人信息并定时发邮件(通过公司邮箱)

需求 在大屏上显示出每个项目的构建情况,如果构建失败,大屏上项目颜色变红的同时要给最新构建这个项目的用户发送邮件,提醒他构建失败了。 准备知识 大屏上显示的项目构建情况,其实是通过Jenkins api 获取的,想要看…

自动部署项目,全靠它了!

前几天我把我的开源项目部署到了云服务器。 我部署的大概流程: 登录到云服务器控制台,新建一个服务器实例(我用的 Ubuntu Linux)。在自己的电脑上生成 SSH 秘钥,将生成的公钥和实例进行绑定。使用 SSH 登录到云服务器…

大数据 linux目录操作

linux 目录操作 常用权限操作 常用权限操作 chgrp命令 功能:修改文件所属组 语法格式:chgrp 用户组 文件(说明:ch - change;grp - group) chown命令 功能:改变文件所有者 语法格式&…

R语言Outliers异常值检测方法比较

识别异常值的方法有很多种,R中有很多不同的方法。 最近我们被客户要求撰写关于异常值检测的研究报告,包括一些图形和统计输出。关于异常值方法的文章结合了理论和实践。理论一切都很好,但异常值是异常值,因为它们不遵循理论。如…

chatGPT能不能有危险活体模型

🍿*★,*:.☆欢迎您/$:*.★* 🍿

【安全狗安全研究】SkidMap挖矿木马研究

近日,安全狗威胁情报中心监测到多起“Skidmap”挖矿木马事件。经研判,这些病毒感染事件是攻击者经Redis未授权访问漏洞攻击的方式植入挖矿木马“SkidMap”导致的。虽然“SkidMap”并非新型的病毒家族,但鉴于该病毒家族一直保持着较高的流行热…

多种方式绘制简单的作废章

作废章是常用的长方形印章,其形式如下图所示(图片来自参考文献1)。印章的形式很简单,就是红色方框内显示作废两个字,其实在网上百度长方形印章的话,可以搜索出很多类似形式的印章,区别仅在于尺寸…

lcd屏调试记录

一,lcd屏介绍 LCD液晶屏的接口类型非常丰富,最常用的接口主要有RGB、MCU、LVDS、MIPI接口。 1、RGB接口 LCD液晶屏的RGB接口通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及三者组合来得到丰富多彩的颜色,RGB分别代表红、绿、蓝三个通道的…