声明:本文由我与葛先生无差异地合作完成。
需求背景:
有的项目需要采集用户在每个页面的停留时长(毫秒数)。采集工作由前端进行,然后发送给后端。
前端实现:
-
在
/router/index.js
中设定一个全局的前置导航守卫。 -
在
/router/index.js
中声明两个全局变量,分别为:startTime:为记录第一次进入路由组件或者进入上一个路由组件的时间。
currentTime:为记录每次路由进入的时间戳。
-
在前置导航守卫的 to 中进行逻辑处理。如果to存在,则说明跳转发生。
-
每次计算时间差时候,不要忘记再次初始化startTime。
实现代码:
let startTime = Date.now()
let currentTime
router.beforeEach((to, from, next) => {
// 如果to存在,则说明路由发生了跳转
if (to) {
// 第一步:页面跳转后记录一下当前的时间 currentTime
currentTime = Date.now()
// ------------
// 第二步:在这里把 currentTime - startTime 的 差值 发送给后端
// ------------
// 第三步:每次都要初始化一下 startTime
startTime = Date.now()
}
next()
})
Demo代码:
let startTime = Date.now()
let currentTime
router.beforeEach((to, from, next) => {
if (to) {
currentTime = Date.now()
console.log('startTime = ', startTime)
console.log('用户由 ', from.path, ' 页面 跳转到 ', to.path, ' 页面,在 ', from.path, ' 页面停留了 ', currentTime - startTime, '毫秒。转换成秒数约为:', parseInt((currentTime - startTime) / 1000))
startTime = Date.now()
console.log('======== 分割线 ========')
}
next()
})
请大家指教。