位置: 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)

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

  • vivo怎么看屏幕使用时间(vivo怎么看屏幕分辨率)

    vivo怎么看屏幕使用时间(vivo怎么看屏幕分辨率)

  • 智慧团建报到时间在哪里查(智慧团建报到时间是什么意思)

    智慧团建报到时间在哪里查(智慧团建报到时间是什么意思)

  • 华为手机阅读模式怎么关闭(华为手机阅读模式在哪里设置)

    华为手机阅读模式怎么关闭(华为手机阅读模式在哪里设置)

  • 华为手机一键还原在哪(华为手机一键还原微信)

    华为手机一键还原在哪(华为手机一键还原微信)

  • airpods突然没声音(airpods突然没声音,音乐还在播放)

    airpods突然没声音(airpods突然没声音,音乐还在播放)

  • 登录别人的qq空间别人会有提示吗(登录别人的qq空间需要验证)

    登录别人的qq空间别人会有提示吗(登录别人的qq空间需要验证)

  • 我经常访问的主页怎么删除(我经常访问的主持人英语)

    我经常访问的主页怎么删除(我经常访问的主持人英语)

  • QQ如何取消邀请群成员一起编辑文档(qq怎么取消邀请)

    QQ如何取消邀请群成员一起编辑文档(qq怎么取消邀请)

  • 苹果x安兔兔跑分多少(安兔兔 iphone x)

    苹果x安兔兔跑分多少(安兔兔 iphone x)

  • 微信账号评估是什么意思(微信账号评估风险怎么弄)

    微信账号评估是什么意思(微信账号评估风险怎么弄)

  • 笔记本充不进去电一拔电源就关机了(笔记本充不进去电怎么解决)

    笔记本充不进去电一拔电源就关机了(笔记本充不进去电怎么解决)

  • 华为手机拍照泛白怎么解决(华为手机拍照泛白光)

    华为手机拍照泛白怎么解决(华为手机拍照泛白光)

  • excel怎么设置文本类型(excel怎么设置文本型)

    excel怎么设置文本类型(excel怎么设置文本型)

  • 被挡访客可解锁是什么意思(被挡访客怎么解除)

    被挡访客可解锁是什么意思(被挡访客怎么解除)

  • wps和pdf有什么区别(pdf和wps的区别)

    wps和pdf有什么区别(pdf和wps的区别)

  • 办公室自动化属于什么领域(办公室的自动化)

    办公室自动化属于什么领域(办公室的自动化)

  • ip地址为什么相同(ip地址为什么不一样)

    ip地址为什么相同(ip地址为什么不一样)

  • 华为m6支持内存卡吗(华为m6支持扩展内存是多大的)

    华为m6支持内存卡吗(华为m6支持扩展内存是多大的)

  • 存储器系统是指(存储器系统由哪些部分组成)

    存储器系统是指(存储器系统由哪些部分组成)

  • 怎么在ios上下载哔咔(怎么在ios上下载不了软件)

    怎么在ios上下载哔咔(怎么在ios上下载不了软件)

  • oppo电子保修卡在哪里(oppo电子保修卡在哪里激活)

    oppo电子保修卡在哪里(oppo电子保修卡在哪里激活)

  • 文档不能修改怎么处理(文档不让修改怎么办)

    文档不能修改怎么处理(文档不让修改怎么办)

  • 幕帘探测器是什么功能(幕帘探测器安装位置)

    幕帘探测器是什么功能(幕帘探测器安装位置)

  • 华为nova5支持人脸支付吗(华为nova5i支持人脸识别解锁吗)

    华为nova5支持人脸支付吗(华为nova5i支持人脸识别解锁吗)

  • 魅族手机自动关机是什么原因(魅族手机自动关机重启是怎么回事)

    魅族手机自动关机是什么原因(魅族手机自动关机重启是怎么回事)

  • WebSocket(websocket怎么读)

    WebSocket(websocket怎么读)

  • 总账会计的职责目标设定
  • 个体工商户应如何购买社会保险公积金
  • 工业企业取得土地收益
  • 个人所得税有哪些减免政策
  • 税控盘维护费开的是普票可以抵扣吗
  • 记账凭证拆开
  • 固定资产折旧准予扣除是什么意思
  • 零税率和免税一样吗?哪一个更优惠?
  • 出口托收业务
  • 员工回家探亲的文案
  • 超过缴款期限缴纳税款
  • 房地产开发企业土地增值税清算
  • 抵减的增值税如何记账
  • 金税三期中个税怎么算
  • 跨月销项负数发票怎么做账
  • 收到增值税专用发票是已经付款了吗
  • 外购一批原材料对外销售
  • 给了钱不给发票可以报警吗
  • 营改增后印花税计税依据文件
  • 企业申请增值税专用发票
  • 税收分类编码选错了没事吧
  • 航空公司按照一次性收费
  • 其他货币资金的概念
  • 企业转让二手房增值税
  • 金税盘开的发票显示未报送怎么办
  • 农业机耕服务是什么税收分类编码
  • 企业开票信息可以改吗
  • 外购固定资产入账
  • 会计分录错误用什么方法更正
  • 房地产预售阶段怎么开具发票
  • 银行电子承兑到期了怎么兑现操作
  • 外购固定资产入账
  • 事业单位财产清查怎么进行
  • 人力资源规划系统包括哪些主要内容
  • 出口退税的期限是多长
  • 无形资产入账价值包括资本化支出吗
  • 收到税务局退回的企业所得税分录
  • 物业公司购买空调合法吗
  • 工会经费是如何计提的
  • php框架运行原理
  • php的time函数
  • 帝国cms目录
  • 校验码如何查询
  • java 读写锁 map
  • python requests检测响应状态码
  • 快递公司账务处理流程及方法总结
  • 个人福利要交税吗
  • mysql查询表里数据
  • 工会经费按每月
  • 金蝶利润表为什么只有累计数没有本月数
  • access里面也暗含了sql
  • 原材料暂估入库分录
  • 幼儿园伙食账目
  • 初次购买金税盘怎么做账
  • 收到土地使用权转让怎么做账
  • 银行存款支付业务招待费
  • 税控维护费减免税款
  • 保险公司赔付进项税
  • 营业外支出的用法
  • 小规模转一般纳税人进项票如何处理
  • 融资租入的设备怎么入账
  • 财政补助结转余额在借方还是贷方
  • mysql日期字段
  • windowsxp的快捷键
  • putty怎么连接linux
  • swupdtmr.exe - swupdtmr进程是什么意思 什么作用
  • mac怎么管理字体大小
  • javascript RegExp 使用说明
  • jquery可以实现哪些效果
  • jquery validation plugin
  • 家字取名男孩名字
  • nodejs esmodule
  • jquery禁用输入框
  • 用javascript
  • Python中字符串的定界符
  • 广西电子发票如何申请
  • 注册财税公司需要什么条件
  • 非道路机械环保标志图片
  • 计提消费税的会计分录讲解
  • 财政部国家税务总局2021年40号
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设