MDN API

文档链接

随着网页发展,对检测某个(些)元素是否出现在可视窗相关的需求越来越多了?比如:

当页面滚动时,懒加载图片或其他内容。
实现“可无限滚动”网站,也就是当用户滚动网页时直接加载更多内容,无需翻页。
对某些元素进行埋点曝光
滚动到相应区域来执行相应动画或其他任务。

一直以来,检测元素的可视状态或者两个元素的相对可视状态都不是件容易事,大部分解决办法并不完全可靠,实现方式很丑陋,也极易拖慢整个网站的性能。
IntersectionObserver正因此而生

需求 : 对某些元素进行埋点曝光

reportDatail() 方法 对容器内容进行监听
如果dom 初始化存在 则在mounted() 进行监听即可;
如果 dom 是组件 是根据 请求返回的data 然后再渲染组件dom 则该方法使用在请求返回后

 asiosDemo(){...请求if(success) {this.list = data //返回的数据 然后list 对组件进行渲染this.$nextTick(() => {this.reportDatail()})}}
methods:{reportContent(index, name) {console.log('曝光内容请求', index, name)},// 对dom 进行监听reportDatail() {// 容器domconst dom = document.querySelector('.monitor-list')setTimeout((_) => {this.$_reportContent({observeNodes: dom,childNodes: dom.querySelectorAll('.content-task-item') // 监听子元素dom},// 回调函数 对返回的数据做埋点处理this.reportContent)}, 0)},$_reportContent(options, callBackFn) {// observeNodes 容器元素dom// childNodes 被监听的曝光子元素domconst { observeNodes, childNodes } = optionsconst io = new IntersectionObserver(function(entrier) {entrier.forEach((el, i) => {if (el.isIntersecting) {// _index _name 是子元素dom 创建的值let _index = el.target.getAttribute('data-index')let _name = el.target.getAttribute('data-name')callBackFn(_index, _name)// 监听的元素进行解绑 io.unobserve(el.target)}})},{root: observeNodes,rootMargin: '0px'})if (childNodes && childNodes.length !== 0) {childNodes.forEach((el) => {let _index = el.getAttribute('data-index') * 1// this.exposureList记录最新的曝光内容 之前曝光过的不再监听if (this.exposureList.includes(_index)) {io.observe(el)}})}},
}

new IntersectionObserver 使用笔记相关推荐

  1. 前端项目总结干货 + 渡一、coderwhy、黑马、尚硅谷实操笔记(第二版,持续更新中~~~)

    前端学习笔记(温馨提示:最好根据目录查看笔记) 构建vite.vue项目 1.npm create vite@latest my-vue-app 2.vue create vue01 知识储备 响应式 ...

  2. 【读书笔记】知易行难,多实践

    前言: 其实,我不喜欢看书,只是喜欢找答案,想通过专业的解答来解决我生活的困惑.所以,我听了很多书,也看了很多书,但看完书,没有很多的实践,导致我并不很深入在很多时候. 分享读书笔记: <高效1 ...

  3. 【运维学习笔记】生命不息,搞事开始。。。

    001生命不息,搞事不止!!! 这段时间和hexesdesu搞了很多事情! 之前是机械硬盘和固态硬盘的测速,我就在那默默的看着他一个硬盘一个机械测来测去. 坐在他后面,每天都能看到这位萌萌的小男孩,各 ...

  4. SSAN 关系抽取 论文笔记

    20210621 https://zhuanlan.zhihu.com/p/353183322 [KG笔记]八.文档级(Document Level)关系抽取任务 共指id嵌入一样 但是实体嵌入的时候 ...

  5. pandas以前笔记

    # -*- coding: utf-8 -*- """ Created on Sat Jul 21 20:06:20 2018@author: heimi "& ...

  6. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  7. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  8. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  9. 王道考研 计算机网络笔记 第六章:应用层

    本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 第一章:王道考研 计算机网络笔记 第一章:概述&计算机网络体系结构 第二章:王道考研 计算机网络笔记 第 ...

最新文章

  1. Keras训练神经网络进行分类并进行交叉验证(Cross Validation)
  2. 2013年新的开始,每周至少要写一篇博客!
  3. 洛谷 P4011 孤岛营救问题【最短路+分层图】
  4. 对Xml文档进行操作(修改,删除)
  5. usb大容量存储设备驱动_usb无法识别怎么办 如何解决usb识别故障【详细步骤】...
  6. 百度在线解析站不限速下载
  7. 无线策略服务器,无线网络中的分布式资源管理策略研究
  8. python如何另存文件_脚本将.py保存到文件中的另一个目录
  9. 小猿圈学习Python字符串操作--字符串分割函数
  10. LLVM语言参考手册之标识符、类型与常量
  11. xmind8 安装方法(old)
  12. iconfont图标引入
  13. 安装Apache服务器
  14. Matlab中神经网络工具箱性能指标(R系数、均方误差、误差直方图)图的含义
  15. (八)RHEL系统之红帽8操作系统基础环境配置及软件安装
  16. less 使用入门教程
  17. vue js 复制div区域内容
  18. 计算机科学与信息系统专业世界大学排名,2018年QS世界大学计算机科学与信息系统专业排名TOP25...
  19. 现代控制理论——矩阵指数函数的计算方法
  20. 出现The specified base path ““ contains a package but “catkin_make“ must be invoked...的解决方法

热门文章

  1. 解决Mac电脑显示的系统时间不准确的方法
  2. 2022新版Q绑查询HTML网页源码
  3. 微信小程序wxs封装使用以及公共js组件封装
  4. Kettle(数据过滤)
  5. 打印查询到的mysql_从mysql查询中打印随机行
  6. fortran open使用
  7. Android View的圆角和阴影(border and shadow)
  8. 在windows media player 视频上加载字幕
  9. 可信计算机系统可信的基点是,(  )是可信计算机系统的可信基点。
  10. 进化计算/进化算法×传统数学优化方法×机器学习