页面浏览和用户停留时间
SPA项目中 url的改变完全来自replaceState和pushState函数
这两个函数的特点是只改变url和history对象 不重新请求网页内容
因此需要用vue-router的beforeEach
和onBeforeRouteLeave
函数中进行数据上报
收集用户点击事件
网上有的资料说可用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>