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


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 相关文章推荐
js验证表单大全
Nov 25 Javascript
Jquery进度条插件 Progress Bar小问题解决
Jul 12 Javascript
js异步加载的三种解决方案
Mar 04 Javascript
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
Apr 02 Javascript
Node.js插件的正确编写方式
Aug 03 Javascript
javascript实现当前页导航激活的方法
Feb 27 Javascript
JavaScript中的splice()方法使用详解
Jun 09 Javascript
javascript框架设计之框架分类及主要功能
Jun 23 Javascript
js实现精确到秒的日期选择器完整实例
Apr 30 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
Feb 18 jQuery
微信小程序授权登陆及每次检查是否授权实例代码
Sep 18 Javascript
微信小程序实现购物车小功能
Dec 30 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
第六节 访问属性和方法 [6]
2006/10/09 PHP
smarty的保留变量问题
2008/10/23 PHP
PHP 强制下载文件代码
2010/10/24 PHP
PHP写的加密函数,支持私人密钥(详细介绍)
2013/06/09 PHP
解析PHP留言本模块主要功能的函数说明(代码可实现)
2013/06/25 PHP
PHP引用的调用方法分析
2016/04/25 PHP
PHP面向对象自动加载机制原理与用法分析
2016/10/14 PHP
对JavaScript的eval()中使用函数的进一步讨论
2008/07/26 Javascript
正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度
2008/09/27 Javascript
js实现仿qq消息的弹出窗效果
2016/01/06 Javascript
jQuery实现查找最近父节点的方法
2016/06/23 Javascript
JS实现n秒后自动跳转的两种方法
2020/11/30 Javascript
微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
2016/11/25 Javascript
JavaScript数据类型和变量_动力节点Java学院整理
2017/06/26 Javascript
Vue组件中slot的用法
2018/01/30 Javascript
AngularJS实现动态切换样式的方法分析
2018/06/26 Javascript
vue-cli3 DllPlugin 提取公用库的方法
2019/04/24 Javascript
python实现百度语音识别api
2018/04/10 Python
python两个_多个字典合并相加的实例代码
2019/12/26 Python
Debenhams爱尔兰:英国知名的百货公司
2017/01/02 全球购物
介绍一下Make? 为什么使用make
2013/12/08 面试题
《盲人摸象》教学反思
2014/02/16 职场文书
领导调研接待方案
2014/02/27 职场文书
2014年安全生产大检查方案
2014/05/13 职场文书
公司户外活动总结
2014/07/04 职场文书
学习走群众路线心得体会
2014/11/05 职场文书
2015年班级元旦晚会活动总结
2014/11/28 职场文书
写给女朋友的检讨书
2015/05/06 职场文书
上课迟到检讨书
2015/05/06 职场文书
2015年妇幼保健工作总结
2015/05/19 职场文书
教师理论学习心得体会
2016/01/21 职场文书
Vue实现下拉加载更多
2021/05/09 Vue.js
解决Navicat for Mysql连接报错1251的问题(连接失败)
2021/05/27 MySQL
关于Python OS模块常用文件/目录函数详解
2021/07/01 Python
PHP正则表达式之RCEService回溯
2022/04/11 PHP
使用python绘制横竖条形图
2022/04/21 Python