记录页面停留时间、功能点击次数

// wxml
<view id="btn1" bindtap="handlerClick">点我</view>

// js
const { startToTrack, startByClick, startByBack } = require("../../utils/track");

Page({
	// 点击 tab 时用此方法触发埋点
	onTabItemTap: () => startToTrack(),
	
	// 被跳转的页面用此方法触发埋点
	onShow: () => startToTrack(),

	// 返回上一页时调用此方法(tab切换时不需要)
	onUnload: () => startByBack(),

	// 点击节点时触发埋点
	handlerClick(res) {
		startByClick(res.currentTarget.id);
	}
})

track.js:足迹文件

// 新建页面埋点
let newStorage = data => {
  return {
    time: data && data.time || 0,// 页面访问时间
    click: data && data.click || [],// 点击事件次数
  }
}
let route = "";// 当前页面路由
let storage = null;// 埋点信息
let TIME = null;// 当前页累计访问时间(秒)

// 计时器:记录当前页面停留时间
let buying = function () {
  let func = () => storage.time++;
  TIME = setInterval(func, 1000);
}

// 获取埋点数据
let getSession = () => {
  wx.getStorage({
    key: route,
    success: res => storage = newStorage(res.data),// 已有当前页信息
    fail: res => storage = newStorage(),// 没有当前页信息
    complete: () => buying()// 开始计时
  })
}

// 停止统计 && 保存埋点数据 && 初始化页面变量
let setSession = () => {
  clearInterval(TIME);// 停止统计
  wx.setStorage({ key: route, data: storage })// 保存埋点数据
  initData();// 初始化
}

// 小程序切前台
wx.onAppShow( res => {
  route = res.path;
  getSession();
})

// 小程序切后台
wx.onAppHide( res => setSession() )

// 异常捕捉
wx.onError( error => console.error("捕获到异常错误:", error) )

// 初始化信息
let initData = () => {
  route = "";
  storage = null;
  TIME = null;
}

module.exports = {
  // 页面触发埋点
  startToTrack() {
    setSession();// 停止旧页面统计 && 保存旧页面信息

    let arr = getCurrentPages();// 获取页面信息
    route = arr[arr.length - 1].route;// 获取页面路由
    getSession();// 获取新页面埋点信息 && 开始统计
  },

  // 返回按钮触发埋点
  startByBack(){
    setSession();// 停止旧页面统计 && 保存旧页面信息
    
    let arr = getCurrentPages();// 获取页面信息
    route = arr[arr.length - 2].route;// 获取页面路由
    getSession();// 获取新页面埋点信息 && 开始统计
  },

  // 通过点击事件触发埋点 id--以dom的id属性作为storage里唯一的key值
  startByClick(id){
    let arr = storage.click.filter(item => item.id === id);// 查找元素历史足迹
    if(arr.length) {
      arr[0].num++;// 继续增长
      storage.click.concat(arr);
    }else{
      storage.click.push({ id: id, num: 1 });// 新增
    }
  },

  // 查询storage用量, 同一个小程序 storage最大限制10MB
  getBalance(){
    wx.getStorageInfo({
      success: option => {
        console.log("当前内存使用量:", option.currentSize, "KB");
        console.log("剩余内存可用量:", `${option.limitSize - option.currentSize}KB(${100 - (option.currentSize / option.limitSize)}%)`)
      }
    })
  }
}

2021年5月28日更新

工程demo及截图

1、首页demo代码

如图在按钮上添加id标识,用于记录点击次数

python3 朋友圈访客 朋友圈访客记录小程序_python3 朋友圈访客


js部分onshow添加startToTrack方法,用于记录页面停留时间。点击事件中添加startByClick事件记录点击次数。

python3 朋友圈访客 朋友圈访客记录小程序_点击事件_02


2、被跳转页demo代码

同上

python3 朋友圈访客 朋友圈访客记录小程序_python3 朋友圈访客_03


除了添加startToTrackstartByClick方法外,添加startByBack方法用于返回上一页时记录页面停留时间

python3 朋友圈访客 朋友圈访客记录小程序_javascript_04


3、首页点击按钮跳转

图中首页点击按钮跳转page2页面后,session中存入了一条key为当前页面路径“pages/index/index”的字段,并存入了页面停留时间time,页面中点击事件的id及其点击次数。

python3 朋友圈访客 朋友圈访客记录小程序_当前页_05


4、page2点击按钮跳转

图中page2点击按钮跳转了首页,session中存入了page2页面的停留时间及点击事件的点击次数

python3 朋友圈访客 朋友圈访客记录小程序_javascript_06