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


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 相关文章推荐
通过 Dom 方法提高 innerHTML 性能
Mar 26 Javascript
JavaScript 以对象为索引的关联数组
May 19 Javascript
Jquery Autocomplete 结合asp.net使用要点
Oct 29 Javascript
JS简单操作select和dropdownlist实例
Nov 26 Javascript
javascript实现window.print()去除页眉页脚
Dec 30 Javascript
Bootstrap3制作图片轮播效果
May 12 Javascript
JavaScript实现广告弹窗效果
Aug 09 Javascript
Node 自动化部署的方法
Oct 17 Javascript
jQuery easyui datagird编辑行删除行功能的实现代码
Sep 20 jQuery
JS如何实现封装列表右滑动删除收藏按钮
Jul 23 Javascript
Javascript新手入门之字符串拼接与变量的应用
Dec 03 Javascript
一起来看看Vue的核心原理剖析
Mar 24 Vue.js
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提取字符串中网站url地址的方法
2014/12/03 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
PHP让数组中有相同值的组成新的数组实例
2017/12/31 PHP
jQuery的实现原理的模拟代码 -1 核心部分
2010/08/01 Javascript
javascript编码的几个方法详细介绍
2013/01/06 Javascript
javascript 回调函数详解
2014/11/11 Javascript
js实现仿百度汽车频道选择汽车图片展示实例
2015/05/06 Javascript
javascript仿百度输入框提示自动下拉补全
2016/01/07 Javascript
使用three.js 画渐变的直线
2016/06/05 Javascript
全面解析标签页的切换方式
2016/08/21 Javascript
Javascript点击按钮随机改变数字与其颜色
2016/09/01 Javascript
Bootstrap Table表格一直加载(load)不了数据的快速解决方法
2016/09/17 Javascript
js实现图片加载淡入淡出效果
2017/04/07 Javascript
vuejs使用FormData实现ajax上传图片文件
2017/08/08 Javascript
深入浅析Vue.js中 computed和methods不同机制
2018/03/22 Javascript
Vue文件配置全局变量的实例
2018/09/06 Javascript
ES6的解构赋值实例详解
2019/05/06 Javascript
Vue中key的作用示例代码详解
2020/06/10 Javascript
Python异常处理总结
2014/08/15 Python
Python通过Django实现用户注册和邮箱验证功能代码
2017/12/11 Python
python机器学习之随机森林(七)
2018/03/26 Python
浅谈python 读excel数值为浮点型的问题
2018/12/25 Python
python批量生成条形码的示例
2020/10/10 Python
CSS3 对过渡(transition)进行调速以及延时
2020/10/21 HTML / CSS
HTML5 Canvas实现玫瑰曲线和心形图案的代码实例
2014/04/10 HTML / CSS
UNIX命令速查表
2012/03/10 面试题
《愚公移山》教学反思
2014/02/20 职场文书
小学教师寄语大全
2014/04/03 职场文书
学习保证书范文
2014/04/30 职场文书
需求分析说明书
2014/05/09 职场文书
4s店销售经理岗位职责
2014/07/19 职场文书
2015财务年终工作总结范文
2015/05/22 职场文书
学雷锋主题班会教案
2015/08/13 职场文书
浅谈JS的二进制家族
2021/05/09 Javascript
js实现模拟购物商城案例
2021/05/18 Javascript
解析Java中的static关键字
2021/06/14 Java/Android