new IntersectionObserver 使用笔记

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() {
		// 容器dom
        const 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 被监听的曝光子元素dom
        const { observeNodes, childNodes } = options
        const 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)
            }
          })
        }
      },
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
当然,我可以为您提供关于Wireshark的使用笔记。下面是一些基本的使用说明: 1. 下载和安装:您可以从Wireshark官方网站(https://www.wireshark.org)下载适用于您操作系统的最新版本,并按照安装向导进行安装。 2. 打开Wireshark:安装完成后,打开Wireshark应用程序。在Windows上,您可以在开始菜单中找到它;在Mac上,您可以在启动台中找到它。 3. 选择网络接口:在Wireshark界面的主窗口中,选择要捕获数据包的网络接口。您可以从列表中选择一个接口,并点击“开始”按钮开始捕获数据包。 4. 捕获数据包:Wireshark将开始捕获选定网络接口上的数据包。您将看到一个实时的数据包列表,显示每个数据包的详细信息。 5. 分析数据包:您可以通过单击数据包来查看其详细信息,包括源地址、目标地址、协议等。Wireshark还提供了各种过滤和排序选项,以帮助您更好地分析数据包。 6. 应用过滤器:Wireshark支持使用过滤器来仅显示您感兴趣的数据包。您可以在“过滤器”框中输入过滤条件,并点击“应用”按钮来应用过滤器。 7. 保存和导出数据包:如果您想保存捕获的数据包以供后续分析,可以使用Wireshark的“保存”选项。您还可以导出捕获的数据包为其他格式,如PCAP、CSV等。 这是一些Wireshark的基本使用笔记,希望对您有所帮助。如果您有任何进一步的问题,请随时提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值