前端如何统计用户在一个页面上的停留时长?

这篇具有很好参考价值的文章主要介绍了前端如何统计用户在一个页面上的停留时长?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前面笔者写了一篇关于前端如何对点位的 click 事件impression 事件埋点的文章 浅谈前端如何做无痕埋点?前端的埋点不仅仅是这两个事件埋点,此外还有 uv(user view,即多少用户访问了当前页面)pv(page view,即当前页面被访问了多少次)用户停留时长。今天我们来聊聊如何计算用户在页面上的停留时长。

需求分析

要统计停留时长,我们需要知道以下两点信息:

  • 用户进入页面的时间 entryTime
  • 用户离开页面的时间 leaveTime

则用户停留时长 stayTime = leaveTime - entryTime

如何判定用户进入页面?

1、DOMContentLoaded 事件或 onload 事件

用户访通过 url 访问一个页面,页面会开始加载对应的 html 文件,html 文件中如果有 css、js、图片等其他资源文件,则会对这些文件发起请求,最后渲染出完整的页面展示给用户。在这个过程中,会触发两个事件:DOMContentLoadedonload

DOMContentLoaded 事件在 html 文件加载并解析完成后触发,此时页面上的其他资源(图片、css等)可能未加载完成;onload 事件会在页面上所有的资源都加载完成后触发,包括 html、图片、css等等。所以事件触发顺序是:DOMContentLoaded -> onload,所以我们可以在两个事件中的任何一个记录用户进入页面的时间,看具体需求。代码如下:

let entryTime,leaveTime
window.addEventListener('DOMContentLoaded',function() {
   // 进入页面的时间戳
   entryTime = new Date().getTime()
 })
 // 或
 window.addEventListener('load',function() {
   // 进入页面的时间戳
   entryTime = new Date().getTime()
 })

2、pageshow 事件

顾名思义,pageshow 事件就是在页面可见的时候触发(即页面第一次加载和刷新时触发),代码如下:

window.addEventListener('pageshow', function() {
   // 进入页面的时间戳
   entryTime = new Date().getTime()
})

如何判定用户离开页面?

1、unload 事件

当用户关闭当前页面时会触发 **unload **事件,我们可以在 unload 事件中记录用户离开时的时间戳,代码如下:

 window.addEventListener('unload',function() {
  // 离开页面的时间戳
   leaveTime = new Date().getTime()
 })
 

2、pagehide 事件

顾名思义,pagehide 事件就是在页面不可见的时候触发,即用户点击跳转其它链接、浏览器前进、后退按钮,或者关闭浏览器选项卡时触发,代码如下:

window.addEventListener('pagehide',function() {
  // 离开页面的时间戳
   leaveTime = new Date().getTime()
})

拓展

上面讲述了打开页面和离开页面会触发的一些事件,此外还有一个 visibilitychange 事件可以监听页面的显示和隐藏,可以在回调函数中通过一个 visibilityState 属性来标识页面的状态。

  • visibilityState = ‘visible’,页面可见
  • visibilityState = ‘hidden’,页面不可见

代码如下:

window.addEventListener('visibilitychange',function(e) {
    if (e.target.visibilityState === 'visible') {
      console.log('visible')
    } else if (e.target.visibilityState === 'hidden') {
      // 离开页面的时间戳
      leaveTime = new Date().getTime()
    }
    
})

这里需要注意的时,我们不能在 e.target.visibilityState === ‘visible’ 分支里记录用户进入页面的时间,因为一开始进入页面的时候,visibilitychange 事件并不会触发,只有当我们切换浏览器 tab、最小化浏览器窗口、打开新页面时才会触发。文章来源地址https://www.toymoban.com/news/detail-659960.html

到了这里,关于前端如何统计用户在一个页面上的停留时长?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在前端开发中,什么叫移动设备上的视口?如何通过header标签中的meta属性设置页面的视口。

    移动设备上的视口(Viewport)是指在移动设备上可见的网页区域。由于移动设备的屏幕尺寸和分辨率各不相同,为了确保网页在各种设备上都能正确显示和交互,需要通过视口设置来适配不同的屏幕尺寸。 在移动设备上,网页通常会比在桌面电脑上的屏幕要宽,因此需要缩放

    2024年02月11日
    浏览(50)
  • 前端项目部署自动检测更新后通知用户刷新页面(前端实现,技术框架vue、js、webpack)——方案一:编译项目时动态生成一个记录版本号的文件

    当我们重新部署前端项目的时候,如果用户一直停留在页面上并未刷新使用,会存在功能使用差异性的问题,因此,当前端部署项目后,需要提醒用户有去重新加载页面。 vue、js、webpack 编译项目时动态生成一个记录版本号的文件 轮询(20s、自己设定时间)这个文件,判断版

    2024年02月02日
    浏览(64)
  • websocket实时推送统计数据给前端页面

    前提须知:websocket基本使用 业务场景,每秒推送统计数据给前端页面,分别显示前天,昨天,今天的前十名客户数据 @ServerEndpoint(\\\"/smsMCustomerStaTop10Ws\\\") 定义推送数据给到具体的连接标识 以上 onOpen() 方法最终触发的业务方法 smsMonitorService.pushSmsMCustomerStaTop10(); 以上 smsMonitorMapper.findSm

    2024年02月15日
    浏览(48)
  • MYSQL 统计停车时长百分比

    2024年02月11日
    浏览(51)
  • python统计mp4/avi视频的时长

    当代码中导入了特定的库,它会使得在代码中可以使用该库所提供的功能和工具。以下是导入的两个库及其作用的解释: os(Operating System)是Python标准库之一,提供了与操作系统交互的功能。它允许您在代码中执行各种与文件和目录操作相关的任务,例如创建、删除、移动文

    2024年02月14日
    浏览(54)
  • 【前端】一个好看的前端页面

    突发奇想,看到这个特效还不错,就加工了一下,如果也能帮到你,很开心  修改input 原生date icon icon 可以去阿里矢量库下载想要的图标 地址:iconfont-阿里巴巴矢量图标库 我使用的是下面这个,但是颜色是白色,因为整个背景图是深色,图标需要浅色。 1. 去掉 date 中上下小

    2023年04月25日
    浏览(47)
  • vue跳转页面后返回不刷新且记录历史滚动条停留位置 (实现了根据不同页面来设置是否刷新记录的功能)

            1.在路由(router/index.js)中,对不刷新的页面设置:         2.在app.vue中设置: 这时返回就不会触发created和mounted         1.在data中定义         2.挂载: 以上就实现了返回页面后滚动条记忆的功能啦! 如果想实现分情况决定是否记忆滚动条以及刷新组件数据

    2024年02月08日
    浏览(49)
  • 用前端框架Bootstrap和Django实现用户注册页面

    命令如下: 执行下面条命令依次创建需要的应用: 名叫users的应用创建好后,还需要在全局配置文件中对应在用进行注册,具体方法如下: 打开““E:Python_projectP_001myshop-testmall_backendmall_backendsettings.py””文件,找到名叫“INSTALLED_APPS”的列表(list),在其中加入应用名,

    2024年02月06日
    浏览(54)
  • DYnamics 365如何隐藏实体列表页面home page页面上的PowerBI按钮和EXCEL template按钮

    如何隐藏以上两个按钮,用ribbon工具根本找不到这2个按钮。 解决方案:添加一个没用的按钮,通过调用enable方法来隐藏。 // JavaScript source code function HiddenButton() { HiddePowerBIButton(); HiddeDocumentTemplateButton(); return false } function HiddePowerBIButton() { } function HiddeDocumentTemplateButton() { } f

    2024年02月11日
    浏览(42)
  • uniap开发小程序定时器清除不成功(页面停留一段时间会清除掉,快速点击可能会清除不掉)

    1.需求 轮训页面会有个6秒的定时器,有时页面刚加载就跳转定时器不能被清除掉 2.解决方案: A:不使用 setInterval() 改用 setTimeout() B:App.vue 定义全局变量 在要使用定时器的A页面获取定时器,A页面跳转的B页面将定时器清除 C:离开A页面的时候将定时器清除,在A页面进入的B页面

    2024年01月25日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包