位置: IT常识 - 正文

IntersectionObserver API详解(IntersectionObserver 翻译)

编辑:rootadmin
IntersectionObserver API详解

推荐整理分享IntersectionObserver API详解(IntersectionObserver 翻译),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:IntersectionObserver 小程序,IntersectionObserver 优点,IntersectionObserver API,IntersectionObserver vue,IntersectionObserver mdn,IntersectionObserver 这个api了解一下,IntersectionObserver API,IntersectionObserver mdn,内容如对您有帮助,希望把文章链接给更多的朋友!

过去,要检测一个元素是否可见或者两个元素是否相交并不容易,比如实现图片懒加载、内容无限滚动等功能时,都需要通过​getBoundingClientRect()​写大量的逻辑计算或者依靠scroll事件监听等性能很差方式来实现。

现在,依靠IntersectionObserver我们能非常便捷且高效的实现上述功能。

一、API// 创建实例const observer = new IntersectionObserver(callback, option);// 开始观察element1observer.observe(element1);// 开始观察element2observer.observe(element2);// 停止观察observer.unobserve(element);// 关闭观察器observer.disconnect();

IntersectionObserver是浏览器原生提供的构造函数,接受两个参数:callback是可见性变化时的回调函数,option是配置对象(该参数可选)。

构造函数的返回值是一个观察器实例。实例的observe方法可以指定观察哪个 DOM 节点,如果需要观察多个DOM节点可以多次添加observe方法。

二、callback 参数

当以下情况发生时会调用回调函数:

Observer 第一次监听目标元素的时候每当目标元素与设备视窗或者其他指定元素发生交集的时候执行IntersectionObserver API详解(IntersectionObserver 翻译)

  

callback函数的参数(entries)是一个数组,每个成员都是一个IntersectionObserverEntry对象。举例来说,如果同时有两个被观察的对象的可见性发生变化,entries数组就会有两个成员。

每个IntersectionObserverEntry对象属性含义如下:

boundingClientRect:目标元素的矩形区域的信息intersectionRatio:目标元素的可见比例,即intersectionRect占boundingClientRect的比例,完全可见时为1,完全不可见时小于等于0intersectionRect:目标元素与视口(或根元素)的交叉区域的信息rootBounds:根元素的矩形区域的信息,getBoundingClientRect()方法的返回值,如果没有根元素(即直接相对于视口滚动),则返回nullisIntersecting:目标元素是否与视口(或根元素)交叉isVisible:并未查阅到相关资料,且经过测试其并不会发生变化target:被观察的目标元素,是一个 DOM 节点对象time:可见性发生变化的时间,是一个高精度时间戳,单位为毫秒三、Option 对象

IntersectionObserver构造函数的第二个参数是一个配置对象。它可以设置以下属性。

root:指定根元素,用于检查目标的可见性。必须是目标元素的父级元素。如果未指定或者为null,则默认为浏览器视窗。rootMargin:根元素的外边距,类似于 CSS 中的margin属性。threshold:目标元素与根元素的交叉比例,可以是单一的 number 也可以是 number 数组,比如,[0, 0.25, 0.5, 0.75, 1]就表示当目标元素 0%、25%、50%、75%、100% 可见时,会触发回调函数。 四、注意点IntersectionObserver API 是异步的,不随着目标元素的滚动同步触发。注册的回调函数将会在主线程中被执行,所以该函数执行速度要尽可能的快。如果有一些耗时的操作需要执行,建议使用 Window.requestIdleCallback() 方法。五、实例:无限滚动<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>IntersectionObserver</title></head><body style="font-size: 24px;text-align: center"><div id="container"></div><div id="loadMore">加载中...</div></body><script> const container = document.querySelector('#container'); const loadMore = document.querySelector('#loadMore'); let index = 0; const loadItems = (count) => { [...Array(count).keys()].forEach((key) => { const p = document.createElement('P'); p.innerHTML = `${key + index}`; container.appendChild(p) }) index += count; } const observer = new IntersectionObserver((entries) => { entries.forEach(({ isIntersecting }) => { if (isIntersecting) { loadItems(20); } }) }); observer.observe(loadMore)</script></html>

无限滚动(infinite scroll)的实现也很简单。通过观察#loadMore元素与浏览器视图的是否交叉,如果交叉则意味着列表已经加载完毕,继续添加更多的元素。

参考:

Intersection Observer API - Web API 接口参考 | MDN

IntersectionObserver API 使用教程 - 阮一峰的网络日志

本文链接地址:https://www.jiuchutong.com/zhishi/298783.html 转载请保留说明!

上一篇:nodejs和npm版本不匹配(node与nodejs)

下一篇:瑞吉外卖项目:编辑员工信息与公共字段自动填充(瑞吉外卖项目简历)

  • 个人所得缴税租房减免该怎么弄?
  • 税前扣除项目主要内容?
  • 建筑服务预征缴纳税款包括附加税吗
  • 房租押金没退款怎么起诉
  • 车辆商业险和强制险交完给退么
  • 计提代扣个人工会经费怎么做账
  • 新会计准则中计提减值如何回转
  • 免税苗木发票如何抵扣计算
  • 本月征期2021
  • 个体户办营业执照需要什么证件和材料
  • 增值税从哪一年开始征收的
  • 应收账款坏账处理审计
  • 个税生产经营所得B表在哪里
  • 失控发票怎么做账处理
  • 专票遗失需要怎么处理?
  • 开发企业售楼处工作内容
  • 无票收入报税后,后期又开票出去怎么处理?
  • 总账科目和明细科目余额分析填列
  • 现金清查制度的内容包括
  • 收到员工水电费怎么做账
  • 安全生产费开工前支付
  • 企业与企业之间进行的电子商务模式是
  • 青岛酒店式公寓出租
  • 交易性金融资产属于什么科目
  • Windows11如何使用管理员账号登录
  • 局域网故障可能的原因
  • 其他应付款的会计分录怎么写
  • 税收风险应对措施包括
  • 溢缴退费是什么意思
  • php二维数组按某个键值排序
  • 归一化的几种方法
  • 网页单行文本框
  • 设置背景图片大小和元素的大小一致的代码
  • docker windows -v
  • 投资房地产的后续计量有哪些
  • 个税多计提了账务处理
  • 个人劳务费需交什么税种
  • 合同资产与应收账款的关系
  • 帝国cms如何判断图片有没有被使用
  • 付款后发票的扩张怎么开
  • 使用权资产是什么意思
  • sql server sql文件
  • 所得税费用的账目处理
  • 会计记账凭证的填制要求
  • 交易性金融资产包括哪些项目
  • 成本类账户期末如有余额在借方
  • 事业单位劳务派遣工能长期干下去吗
  • 公司注销时财务报表要注意什么
  • 小规模附加税要交吗
  • 本年利润如何记账
  • 仓库用托盘怎么入账
  • 私营公司待摊费怎么算
  • sql查询包含特殊
  • FreeBSD5.4之apache-2.0.54+php+ZendOptimizer简单安装、设置
  • xp双系统怎么设置默认系统
  • winoldap.exe - winoldap进程是什么意思
  • xp系统进入桌面后没反应
  • redhat6.9安装图解
  • win7系统如何将插孔设置为ac97前面板
  • 高危KB3045645!Win7/8.1别安装这个补丁
  • windows升级后照片不见了
  • excel表格时间选择
  • xp没有我的电脑图标怎么办
  • tensorflow.nn
  • cocos2djs
  • Unsolved bug in fltk-1.1.10/src/filename_list.cxx for scandir --已解决!
  • 批处理命令在哪个菜单中
  • css中显示
  • Node.js中的什么模块是用于处理文件和目录的
  • 怎么用批处理显示文字
  • android 笔记软件推荐
  • unity获取手机型号
  • javascript基础笔记
  • jquery attr和prop
  • js遍历foreach
  • 重庆沙坪坝区沙磁巷幼儿园
  • 增值税税控开票软件升级
  • 国税怎么取消
  • 为什么非贸易付不了款呢
  • 成都车辆购置税2024年新政策
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设