基于Vue页面监听用户预览时间的思路方法是什么
Admin 2022-07-18 群英技术资讯 675 次浏览
最近的业务中涉及到这样一个需求,在线培训的系统需要知道用户对某个在线预览的页面追踪用户的预览时长。初步我们首先想到借助 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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
用jQuery怎样验证输入是不是数字?在登录注册页面,我们通常需要对输入验证,那么我们怎样知道输入的是不是数字呢?下文给大家分享一个简单的验证数字示例,有一定参考价值,需要的朋友可以参考看看。
用JavaScript写一个九宫格的抽奖盘,供大家参考,具体内容如下点击中间的块,选中奖品的亮块会在边缘的8个块循环;选中后,弹出选中的内容;代码参考:HTML文件:bodydiv class=box ul id=jiangPin lia href=javascript:viod(0); span奖
判断方法:1、使用“document.getElementById("id值")”语句根据指定id值获取div元素对象;2、利用if语句判断div是否存在,语法“if (div元素对象){//元素存在}else{//元素不存在}”。
用JavaScript怎样做点击显示隐藏的效果?点击显示或者点击隐藏效果的应用场景有很多,例如导航菜单,图片展示等等,因此本文就给大家分享一下如何实现简单的点击显示隐藏,实现效果及代码如下:
这篇文章主要介绍了Vue 实现可视化拖拽页面编辑器的方法,帮助大家更好的理解和使用vue,感兴趣的朋友可以了解下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008