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


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 相关文章推荐
javascript 设置文本框中焦点的位置
Nov 20 Javascript
基于jquery的兼容各种浏览器的iframe自适应高度的脚本
Aug 13 Javascript
一些常用的JavaScript函数(json)附详细说明
May 25 Javascript
window.event快达到全浏览器支持了,以后使用就方便了
Nov 30 Javascript
node.js中的path.sep方法使用说明
Dec 08 Javascript
js实现图片无缝滚动特效
Mar 19 Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
Apr 01 Javascript
使用vue-cli导入Element UI组件的方法
May 16 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
Sep 14 Javascript
js实现无限瀑布流实例方法
Sep 16 Javascript
解决vue cli使用typescript后打包巨慢的问题
Sep 30 Javascript
Javascript前端下载后台传来的文件流代码实例
Aug 18 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
模仿OSO的论坛(五)
2006/10/09 PHP
php 删除记录同时删除图片文件的实现代码
2010/05/12 PHP
php修改上传图片尺寸的方法
2015/04/14 PHP
Bootstrap的图片轮播示例代码
2015/08/31 Javascript
JS实现支持Ajax验证的表单插件
2016/03/24 Javascript
javascript高级选择器querySelector和querySelectorAll全面解析
2016/04/07 Javascript
js字符串引用的两种方式(必看)
2016/09/18 Javascript
arcgis for js 修改infowindow样式的方法
2016/11/02 Javascript
layui 数据表格复选框实现单选功能的例子
2019/09/19 Javascript
Vue的状态管理vuex使用方法详解
2020/02/05 Javascript
vue2.x数组劫持原理的实现
2020/04/19 Javascript
tensorflow TFRecords文件的生成和读取的方法
2018/02/06 Python
python3+mysql查询数据并通过邮件群发excel附件
2018/02/24 Python
pandas 读取各种格式文件的方法
2018/06/22 Python
Python基于SMTP协议实现发送邮件功能详解
2018/08/14 Python
pycharm运行和调试不显示结果的解决方法
2018/11/30 Python
Python操作rabbitMQ的示例代码
2019/03/19 Python
Python OpenCV利用笔记本摄像头实现人脸检测
2020/08/20 Python
Python中将两个或多个list合成一个list的方法小结
2019/05/12 Python
tensorflow 报错unitialized value的解决方法
2020/02/06 Python
Keras 使用 Lambda层详解
2020/06/10 Python
Python并发爬虫常用实现方法解析
2020/11/19 Python
html5在移动端的屏幕适应问题示例探讨
2014/06/15 HTML / CSS
CPB肌肤之钥美国官网:Clé de Peau Beauté
2017/09/05 全球购物
洛杉矶健身中心女性专用运动服饰品牌:Marika
2018/05/09 全球购物
整个世界的设计师家具在哈恩:Designathome
2019/03/25 全球购物
计算机个人求职信范例
2014/01/24 职场文书
班长演讲稿范文
2014/04/24 职场文书
法英专业大学生职业生涯规划书范文
2014/09/22 职场文书
2015年七夕情人节活动方案
2015/05/06 职场文书
开学季:喜迎新生,迎新标语少不了
2019/11/07 职场文书
十二月早安励志心语大全
2019/12/03 职场文书
Python中的套接字编程是什么?
2021/06/21 Python
使用Bandicam录制鼠标指针并附带点击声音,还可以添加点击动画效果
2022/04/11 数码科技
JavaScript前端面试组合函数
2022/06/21 Javascript
详解Golang如何实现支持随机删除元素的堆
2022/09/23 Python