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


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 相关文章推荐
使用prototype.js进行异步操作
Feb 07 Javascript
ext for eclipse插件安装方法
Apr 27 Javascript
JScript中使用ADODB.Stream判断文件编码的代码
Jun 09 Javascript
Jquery Change与bind事件代码
Sep 29 Javascript
解析Javascript中中括号“[]”的多义性
Dec 03 Javascript
Vue中img的src属性绑定与static文件夹实例
May 18 Javascript
详解vuejs之v-for列表渲染
Jun 22 Javascript
Echarts基本用法_动力节点Java学院整理
Aug 11 Javascript
vue.js中父组件调用子组件的内部方法示例
Oct 22 Javascript
全面介绍vue 全家桶和项目实例
Dec 27 Javascript
vue中使用GraphQL的实例代码
Nov 04 Javascript
详解vue中v-on事件监听指令的基本用法
Jul 22 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
设置php页面编码的两种方法示例介绍
2014/03/03 PHP
一个简单安全的PHP验证码类、PHP验证码
2016/09/24 PHP
PHP实现字母数字混合验证码功能
2019/07/11 PHP
prototype与jquery下Ajax实现的差别
2009/09/13 Javascript
JS和函数式语言的三特性
2014/03/05 Javascript
javascript中拼接HTML字符串的最快、最好的方法
2014/06/07 Javascript
angular.foreach 循环方法使用指南
2015/01/06 Javascript
JavaScript中解析JSON数据的三种方法
2015/07/03 Javascript
浅谈JavaScript的Polymer框架中的behaviors对象
2015/07/29 Javascript
JS+DIV+CSS实现的经典标签切换效果代码
2015/09/14 Javascript
jquery单击事件和双击事件冲突解决方案
2016/03/02 Javascript
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
2017/01/12 NodeJs
简单的jQuery拖拽排序效果的实现(增强动态)
2017/02/09 Javascript
js 动态生成html 触发事件传参字符转义的实例
2017/02/14 Javascript
深入理解Vuex 模块化(module)
2017/09/26 Javascript
vue实现城市列表选择功能
2018/07/16 Javascript
解决vue keep-alive 数据更新的问题
2018/09/21 Javascript
React 实现拖拽功能的示例代码
2019/01/06 Javascript
Python列表推导式的使用方法
2013/11/21 Python
Python中List.index()方法的使用教程
2015/05/20 Python
Python中map和列表推导效率比较实例分析
2015/06/17 Python
TensorFlow的权值更新方法
2018/06/14 Python
Python实现把多维数组展开成DataFrame
2019/11/30 Python
python turtle工具绘制四叶草的实例分享
2020/02/14 Python
Python基于unittest实现测试用例执行
2020/11/25 Python
HTML5之SVG 2D入门9—蒙板及mask元素介绍与应用
2013/01/30 HTML / CSS
HTML5实现文件断点续传的方法
2017/01/04 HTML / CSS
使用html5新特性轻松监听任何App自带返回键的示例
2018/03/13 HTML / CSS
美国时尚大码女装购物网站:Avenue
2019/05/24 全球购物
Java文件和目录(IO)操作
2014/08/26 面试题
年度考核自我鉴定
2014/03/19 职场文书
暖通工程师岗位职责
2014/06/12 职场文书
争当四好少年演讲稿
2014/09/13 职场文书
教师拔河比赛广播稿
2014/10/14 职场文书
2015年卫生院健康教育工作总结
2015/07/24 职场文书
Python使用Beautiful Soup(BS4)库解析HTML和XML
2022/06/05 Python