在vue3+vue-router SPA项目中进行埋点

页面浏览和用户停留时间

SPA项目中 url的改变完全来自replaceState和pushState函数

这两个函数的特点是只改变url和history对象 不重新请求网页内容

因此需要用vue-router的beforeEachonBeforeRouteLeave函数中进行数据上报

收集用户点击事件

网上有的资料说可用document.elementFromPoint获取元素 实际上这是不行的

如果有弹窗 那么这个函数会取到弹窗蒙层

老老实实用e.target获取被点击的元素即可

项目内使用的组件库是element+ 其按钮都带有一个el-button样式类 并收集用户点击按钮的事件

对于非按钮的可点击元素 例如a标签或者设置了@click的span元素 可以用el-button再包一层 type设置为text就可以 不影响样式

使用HTMLElement.closest可以取到用户实际点击的按钮

javascript 复制代码
  document.addEventListener('click',  (e) => {
    const btn = e.target.closest('.el-button')
    if (btn) {
    // ...
    }
  })

可以获取btn的class style 以及outerHTML属性以定位当前dom

此外还能通过parent属性 逐级向上获取其在dom树的位置

精确收集用户点击事件

对于较为关键的按钮 上面的收集方法就过于粗糙了

需要产品出一个表 为每个关键按钮设置对应的key 单独为其设置上报函数

可以自定义指令简化这一过程

ini 复制代码
const tracked = {
  mounted (el, binding) {
    el.dataset.__tracked = binding
    el.addEventListener('click', e => {
      report(e.target.dataset.__tracked)
    })
  },
  updated (el, binding) {
    el.dataset.__tracked = binding
  },
}

// main.js
const app = createApp(App)
app.directive('tracked',tracked)

// index.vue
<el-button v-tracked="key">按钮</el-button>
相关推荐
xkxnq19 分钟前
第二阶段:Vue 组件化开发(第 17天)
javascript·vue.js·ecmascript
一 乐26 分钟前
绿色农产品销售|基于springboot + vue绿色农产品销售系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端·宠物
HHHHHY2 小时前
mathjs简单实现一个数学计算公式及校验组件
前端·javascript·vue.js
boooooooom2 小时前
Vue3 provide/inject 跨层级通信:最佳实践与避坑指南
前端·vue.js
一颗烂土豆2 小时前
Vue 3 + Three.js 打造轻量级 3D 图表库 —— chart3
前端·vue.js·数据可视化
沉静的思考者2 小时前
vue优雅的适配无障碍
vue.js
愈努力俞幸运2 小时前
vue3 demo教程(Vue Devtools)
前端·javascript·vue.js
持续前行2 小时前
在 Vue3 中使用 LogicFlow 更新节点名称
前端·javascript·vue.js
计算机学姐3 小时前
基于SpringBoot的汉服租赁系统【颜色尺码套装+个性化推荐算法+数据可视化统计】
java·vue.js·spring boot·后端·mysql·信息可视化·推荐算法
+VX:Fegn08953 小时前
计算机毕业设计|基于springboot + vue建筑材料管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计