基于Vue页面监听用户预览时间的思路方法是什么
Admin 2022-07-18 群英技术资讯 895 次浏览
这篇文章给大家分享的是“基于Vue页面监听用户预览时间的思路方法是什么”,对大家学习和理解有一定的参考价值和帮助,有这方面学习需要的朋友,接下来就跟随小编一起学习一下吧。最近的业务中涉及到这样一个需求,在线培训的系统需要知道用户对某个在线预览的页面追踪用户的预览时长。初步我们首先想到借助 Vue 页面的生命周期函数 mounted 和 destroyed,分别在其中加入开始计时和清除计时的逻辑,通过后台的接口上报对应的培训素材的时间数据,即可达到目的。
有了思路,我们就可以开始筹划具体的代码。
在 data 中定义我们通过变量定义计时器,这样可以通过 this.timer 随处可访问,便于后面销毁页面的时候清除它。
duration 为时长的计数变量,初始化为 0,可根据计时器的第二个时间间隔参数,决定单位是秒还是毫秒。
export default {
data() {
return {
timer: null,
duration: 0
}
},
methods: {
startTimer() {
this.timer = setInterval(() => {
console.log('观看时长: ', this.duration)
this.duration++
}, 1000)
},
stopTimer() {
clearInterval(this.timer)
this.updateViewHistory() // 上报数据接口
},
updateViewHistory() {
// 上报接口逻辑代码
....
}
}
}
在 startTimer 函数中我们顺便打印出 duration 变量来验证显示的时间是否正确。
定义好了开始结束的方法,我们就要开始想在哪调用它们。因为预览的页面内容不是唯一的,是根据素材的 id 来获取详情进行渲染的。如果我们把 startTimer 写在 mounted 生命周期里,那么当我们访问不同 id 的页面的时候,无法正常切换我们想要的逻辑。
所以我选择了通过监听路由中的 id 参数,来达到在预览不同页面时候来切换开始和结束的逻辑
watch: {
$route: {
immediate: true,
handler(to, from) {
if (to.params.id) this.trainingId = to.params.id
this.startTimer()
}
}
}
调用了开始计时的方法,终于我们可以在 console 的 log 中可以看到输出了当前的时长

然后也是最后一步,我们需要在页面销毁的时候调用 stopTimer 函数来清除定时器,上报数据。
由于我们的预览页面是通过
window.open打开的独立的标签页,所以这里是通过destroyed生命周期函数监听。如果是通过路由方法进行的跳转,那么我们需要在离开页面的时候进行销毁,方可再通过destroyed监听到。
mounted() {
window.addEventListener('beforeunload', e => this.beforeunloadHandler(e))
},
destroyed() {
window.removeEventListener('beforeunload', e => this.beforeunloadHandler(e))
}
通过 window 的监听器方法来来间接调用 stopTimer 方法
methods: {
beforeunloadHandler (e) {
this.stopTimer()
}
}
这里有人会问为什么不直接在 destroyed 中调用 stopTimer 方法,这样可以分离出特有的逻辑,不与 destroyed 中其它的逻辑混在一起。提高代码的可读性和维护性。
在写代码的时候我们不仅要实现功能,还要想的更多一点,这就是普通和高手的区别。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
JS实现数组去重有什么简单方法呢?JS实现数组去重的方法有很多,下面分享两个简单的方法,及注意事项。下文有实例供大家参考,对大家了解操作过程或相关知识有一定的帮助,而且实用性强,希望这篇文章能帮助大家,下面我们一起来了解看看吧。
这篇文章主要为大家介绍了eslint在vue中如何使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
这篇文章主要介绍了JS解决 Array.fill()参数为对象指向同一个引用地址问题,解决方案使用map返回出不同的引用的地址,fill参数可随意填写(不为空),主要是map函数中返回的数据,需要的朋友可以参考下
今天我们来了解关于JavaScript构造函数的内容,下文会介绍构造函数是什么,构造函数用来做什么,构造函数的执行过程和构造函数的返回值这些,对新手学习和理解JavaScript构造函数有一定的帮助,需要的朋友可以参考。
微信小程序实现拍照打卡功能 本文实例为大家分享了微信小程序实现拍照打卡的具体代码,供大家参考,具体内容如下 由于拍照组件是相当于一个块,用隐藏显示的方法不太好,为了更好的用户交互,选择了在一个新的页面调用相机组件,上传图片并保存打卡数据的方式. 小程序端 签到页面wxml <view class="signBtn" bindtap="signSubmit"> <view>{{signTime}}</view> <view>打卡签 ...
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008