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


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 + Ajax调用webService实例代码(asp.net)
Aug 27 Javascript
Bootstrap源码学习笔记之bootstrap进度条
Dec 24 Javascript
js实现手机拍照上传功能
Jan 17 Javascript
vue.js 初体验之Chrome 插件开发实录
May 13 Javascript
angularjs $http实现form表单提交示例
Jun 09 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
Apr 01 Javascript
JavaScript对象拷贝与Object.assign用法实例分析
Jun 20 Javascript
JS实现判断有效的数独算法示例
Feb 25 Javascript
layui实现给某一列加点击事件
Oct 26 Javascript
Vue列表循环从指定下标开始的多种解决方案
Apr 08 Javascript
Node快速切换版本、版本回退(降级)、版本更新(升级)
Jan 07 Javascript
使用compose函数优化代码提高可读性及扩展性
Jun 16 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 5.0对象模型深度探索之类的静态成员
2008/03/27 PHP
PHP foreach循环使用详解与实例代码
2010/05/08 PHP
php下载excel无法打开的解决方法
2013/12/24 PHP
Yii中srbac权限扩展模块工作原理与用法分析
2016/07/14 PHP
PHP反射学习入门示例
2019/06/14 PHP
PHP7数组的底层实现示例
2019/08/25 PHP
javascript YUI 读码日记之 YAHOO.util.Dom - Part.4
2008/03/22 Javascript
Extjs 继承Ext.data.Store不起作用原因分析及解决
2013/04/15 Javascript
jQuery调用AJAX时Get和post公用的乱码解决方法实例说明
2013/06/04 Javascript
基于EasyUI的基础之上实现树形功能菜单
2017/06/28 Javascript
Vue自定义过滤器格式化数字三位加一逗号实现代码
2018/03/23 Javascript
vue-property-decorator用法详解
2019/12/12 Javascript
Bootstrap table 服务器端分页功能实现方法示例
2020/06/01 Javascript
three.js 将图片马赛克化的示例代码
2020/07/31 Javascript
解决Python中由于logging模块误用导致的内存泄露
2015/04/23 Python
python类中super()和__init__()的区别
2016/10/18 Python
Python正则表达式教程之二:捕获篇
2017/03/02 Python
基于Python __dict__与dir()的区别详解
2017/10/30 Python
matplotlib绘图实例演示标记路径
2018/01/23 Python
Python爬虫的两套解析方法和四种爬虫实现过程
2018/07/20 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
2019/06/18 Python
python中 * 的用法详解
2019/07/10 Python
wxpython绘制圆角窗体
2019/11/18 Python
Python流程控制常用工具详解
2020/02/24 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
Python3.8.2安装包及安装教程图文详解(附安装包)
2020/11/28 Python
纯HTML5+CSS3制作图片旋转
2016/01/12 HTML / CSS
计算机网络专业个人的自我评价
2013/10/17 职场文书
祖国在我心中演讲稿600字
2014/05/04 职场文书
煤矿安全生产标语
2014/06/06 职场文书
材料物理专业求职信
2014/09/01 职场文书
2019财务转正述职报告
2019/06/27 职场文书
某药房的新员工入职告知书!
2019/07/15 职场文书
餐厅如何利用“营销策略”扭转亏本局面
2019/10/15 职场文书
Python机器学习之PCA降维算法详解
2021/05/19 Python
Spring Cloud OAuth2实现自定义token返回格式
2022/06/25 Java/Android