浅谈微信小程序列表埋点曝光指南


Posted in Javascript onOctober 15, 2019

背景

最近项目中,开发一个小程序列表页,PM大大给我提了一个埋点需求,列表中的每一项,出现在屏幕中的时候,需要上报一条记录。

目标

浅谈微信小程序列表埋点曝光指南

如图中操作,要依次上报 item 1 - item7,但是上滑的时候,不再重复上报

怎么做

接到需求的第一感觉是,我难道要监听页面滚动,然后通过offsetTop 去算吗!!!??? 这样显然不是最高效的。于是我去翻了一下微信的开发文档,发现有一个IntersectionObserver 的API,正好满足我的需求。

首先我们需要创建一个 IntersectionObserver wx.createIntersectionObserver(Object component, Object options)

IntersectionObserver 一共有四个方法

  • IntersectionObserver.relativeTo 使用选择器指定一个节点,作为参照区域之一。
  • IntersectionObserver.relativeToViewport(Object margins) 指定页面显示区域作为参照区域之一
  • IntersectionObserver.observeCallback callback) 指定目标节点并开始监听相交状态变化情况
  • IntersectionObserver.disconnect()
  • 停止监听。回调函数将不再触发

我们这里的参照物是屏幕,所以我们使用 IntersectionObserver.relativeToViewport 来制定我们的参照物,并制定相较规则

Page({
 data: {
 list: [
  { value: 1, hadReport: false }, 
  { value: 2, hadReport: false },
  { value: 3, hadReport: false },
  { value: 4, hadReport: false },
  { value: 5, hadReport: false },
  { value: 6, hadReport: false },
  { value: 7, hadReport: false },
  { value: 8, hadReport: false },
  { value: 9, hadReport: false },
 ]
 },
 onLoad() {
 this._observer = this.createIntersectionObserver({ observeAll: true })
 this._observer.relativeToViewport({ bottom: 0 })
  .observe('.item', (res) => {
  const { index } = res.dataset;
  if (!this.data.list[index].hadReport) {
   console.log(`report ${index}`) 
   this.data.list[index].hadReport = true;
   this.setData({ list: [].concat(this.data.list)})
  }
  
  })
 },
 onUnload() {
 if (this._observer) this._observer.disconnect()
 }
})

最后实现的效果如下

浅谈微信小程序列表埋点曝光指南 

结论

  1. 类似这样的埋点,我们以后可以采用监听dom的方式去做,而不是一昧的只想着监听滚动计算位置。
  2. 除了可以做埋点上报,这种监听的方式,还是很适合去做一些图片懒加载等一系列操作。

 联想

上述的所有操作,都是基于微信小程序去做的,那么浏览器有没有相应的API呢?

浏览器是有相应的API的, Intersection Observer API ,具体的用法与上述的用法类似。

var options = {
 rootMargin: '0px',
 threshold: 1.0
 }

 var observer = new IntersectionObserver((...args) => {
 console.log(args);
 }, options);
 observer.observe(document.querySelector('.item'));

注意这个会监测dom元素的可见性变化,也就是说当dom出现在视窗的时候会触发回调,消失在视窗的时候也会触发回调

但是浏览器的 IntersectionObserver 属性兼容性一般,如果想要在浏览器做曝光或者懒加载可以考虑采用原始的方法,监听浏览器滚动,并计算dom的offsetTop,可以参考笔者很久前写的 图片延时 加载原理 及应用

浅谈微信小程序列表埋点曝光指南 

参考文档

谈谈IntersectionObserver懒加载

微信小程序IntersectionObserver 文档

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用jQuery实现检测浏览器及版本的脚本代码
Jan 22 Javascript
SWFObject 2.1以上版本语法介绍
Jul 10 Javascript
js跨域问题之跨域iframe自适应大小实现代码
Jul 17 Javascript
jquery validate表单验证插件
Sep 06 Javascript
使用开源工具制作网页验证码的方法
Oct 17 Javascript
关于jQuery里prev()的简单操作代码
Oct 27 jQuery
vue给组件传递不同的值方法
Sep 29 Javascript
vue通过video.js解决m3u8视频播放格式的方法
Jul 30 Javascript
在layui框架中select下拉框监听更改事件的例子
Sep 20 Javascript
js实现无限层级树形数据结构(创新算法)
Feb 27 Javascript
JS数组及对象遍历方法代码汇总
Jun 16 Javascript
请求时token过期自动刷新token操作
Sep 11 Javascript
javascript网页随机点名实现过程解析
Oct 15 #Javascript
javascript随机变色实例代码
Oct 15 #Javascript
vue中axios的二次封装实例讲解
Oct 14 #Javascript
Vue项目打包部署到iis服务器的配置方法
Oct 14 #Javascript
浅析微信小程序modal弹窗关闭默认会执行cancel问题
Oct 14 #Javascript
vue实现百度语音合成的实例讲解
Oct 14 #Javascript
vue中进行微博分享的实例讲解
Oct 14 #Javascript
You might like
URL Rewrite的设置方法
2007/01/02 PHP
PHP随机生成随机个数的字母组合示例
2014/01/14 PHP
header导出Excel应用示例
2014/01/24 PHP
php实现把url转换迅雷thunder资源下载地址的方法
2014/11/07 PHP
10个超级有用的PHP代码片段果断收藏
2015/09/23 PHP
十个PHP高级应用技巧果断收藏
2015/09/25 PHP
JS构建页面的DOM节点结构的实现代码
2011/12/09 Javascript
超炫的jquery仿flash导航栏特效
2014/11/11 Javascript
通过正则表达式获取url中参数的简单实现
2016/06/07 Javascript
详解webpack+vue-cli项目打包技巧
2017/06/17 Javascript
Three.js利用orbit controls插件(轨道控制)控制模型交互动作详解
2017/09/25 Javascript
vue升级之路之vue-router的使用教程
2018/08/14 Javascript
详解使用VUE搭建后台管理系统(vue-cli更新至3.0)
2018/08/22 Javascript
Vue模拟数据,实现路由进入商品详情页面的示例
2018/08/31 Javascript
vue操作动画的记录animate.css实例代码
2019/04/26 Javascript
iview的table组件自带的过滤器实现
2019/07/12 Javascript
JS如何实现手机端输入验证码效果
2020/05/13 Javascript
我所理解的JavaScript中的this指向
2020/09/04 Javascript
Python中str.format()详解
2017/03/12 Python
python爬虫实战之爬取京东商城实例教程
2017/04/24 Python
对numpy中array和asarray的区别详解
2018/04/17 Python
Python切片操作深入详解
2018/07/27 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
2018/12/28 Python
TensorFlow实现简单的CNN的方法
2019/07/18 Python
Python抓包程序mitmproxy安装和使用过程图解
2020/03/02 Python
ubuntu 安装pyqt5和卸载pyQt5的方法
2020/03/24 Python
Python如何合并多个字典或映射
2020/07/24 Python
澳大利亚拥有最佳跳伞降落点和最好服务的跳伞项目运营商:Skydive Australia
2018/03/05 全球购物
求职自荐信
2013/12/14 职场文书
测绘专业大学生职业生涯规划书
2014/02/10 职场文书
导师工作推荐信范文
2014/05/17 职场文书
2014年大学学生会工作总结
2014/12/02 职场文书
教学副校长工作总结
2015/08/13 职场文书
七年级作文之我的梦想
2019/10/16 职场文书
MySQL中的隐藏列的具体查看
2021/09/04 MySQL
Python使用mitmproxy工具监控手机 下载手机小视频
2022/04/18 Python