统计页面学习时长——停留时间

1718766470153.jpg

思路

  • 页面进入记录开始时间,开启定时器记录时长
  • 页面离开掉接口
    1. 页面返回 和 浏览器返回 都会执行 beforeDestroy,但是无法掉接口
    2. 所以使用组件内路由守卫beforeRouteLeave,监听返回调取接口
    3. 刷新页面不会执行beforeDestroy和beforeRouteLeave,所以需要监听页面刷新
    4. 监听刷新掉接口会存在有时候接口没有掉成功就刷新完了重新加载了,导致接口没有成功
    5. 所以在页面刷新的时候将 学习时长存储,在mounted 判断本地存储有时长再调取接口
 <div class="flex pt-10" style="height: 60px">
        <el-page-header @back="goBack" content="知识库"> </el-page-header>
        <div class="flex_r">已学习
        <span class="size-26 green bold ml-10"{{formattedTime}}</span>
    </div>
</div>
      
      
mounted() {
   if (localStorage.getItem("learnTime")) {
      this.setTime(localStorage.getItem("learnTime"));
      localStorage.removeItem("learnTime");
      clearInterval(this.timer); // 页面卸载前清除计时器
      // 组件销毁前,移除事件监听,防止内存泄漏
      window.removeEventListener("beforeunload", this.beforeunloadHandler);
    }
    this.startTime = new Date(); // 页面加载时记录时间
    this.startTimer(); // 开始计时器
    // 页面刷新检测不到beforeDestroy,使用此方法刷新更新视频进度
    window.addEventListener("beforeunload", this.beforeunloadHandler);
  },
  beforeDestroy() {
    console.log("beforeDestroy");
    clearInterval(this.timer); // 页面卸载前清除计时器
    // 组件销毁前,移除事件监听,防止内存泄漏
    window.removeEventListener("beforeunload", this.beforeunloadHandler);
  },
  // 虽然可以监听到beforeRouteLeave,但是无法调取接口
  beforeRouteLeave(to, from, next) {
    console.log("beforeRouteLeave");
    this.$axios
      .put("/qualityTrain/duration/record", {
        duration: this.time,
      })
      .then((res) => {})
      .catch((err) => {})
      .finally(() => {
        next();
      });
  },
  methods: {
    startTimer() {
      this.timer = setInterval(() => {
        const elapsedTime = new Date() - this.startTime; // 计算时间差
        const hours = Math.floor(elapsedTime / 3600000);
        const minutes = Math.floor((elapsedTime % 3600000) / 60000);
        const seconds = Math.floor((elapsedTime % 60000) / 1000);

        // 补零处理
        const formattedHours = String(hours).padStart(2, "0");
        const formattedMinutes = String(minutes).padStart(2, "0");
        const formattedSeconds = String(seconds).padStart(2, "0");
        this.time = parseInt(elapsedTime / 1000);
        this.formattedTime = `${formattedHours}:${formattedMinutes}:${formattedSeconds}`; // 更新显示的时间
      }, 1000);
    },
    // 掉接口
    setTime(time) {
      if (time) {
        console.log(this.formattedTime, this.time, time);
      } else {
        console.log(this.formattedTime, this.time);
      }
    },
    beforeunloadHandler() {
      localStorage.setItem("learnTime", this.time);
    },
    goBack() {
      this.$router.go(-1);
    },
    
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/723860.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Deflate内部实现(LZ77无损压缩算法)超详细图解算法版~

无损压缩算法 第一阶段&#xff1a;重复消除 — LZ77无损压缩算法算法介绍举例压缩算法思路图解压缩过程 第二阶段&#xff1a;位减少huffman位减少 概览 Gzip Deflate 编码&#xff08;LZ77哈夫曼&#xff09; Brotli LZ77哈夫曼二阶上下文建模 Deflate 分两个阶段压缩数据…

构建高效的大数据量延迟任务调度平台

目录 引言系统需求分析系统架构设计 总体架构任务调度模块任务存储模块任务执行模块 任务调度算法 时间轮算法优先级队列分布式锁 数据存储方案 关系型数据库NoSQL数据库混合存储方案 容错和高可用性 主从复制数据备份与恢复故障转移 性能优化 水平扩展缓存机制异步处理 监控与…

宏观必读:数智化、气候能源、多极化趋势并存,如何获得转型性增长?

关键词速读&#xff1a; 双转型——创新主导的 “新质生产力”正加速推动中国产业的数字化和绿色低碳“双转型”。 双引擎——企业借助“技术创新”和“生态创新”两大引擎&#xff0c;乘势而上&#xff0c;赢得未来机遇。 生成式 AI 与大模型爆发式发展正在引发计算、开发、交…

C语言——扫雷小游戏

扫雷小游戏&#xff1a; 游戏最终效果&#xff1a; 1.先写一下游戏开始的简单界面。 用一个函数来写一下 void menu() {printf(" ---------------------------- \n");printf("| 1.play |\n");printf("| 0.exit …

QT 的文件

QT 和C、linux 一样&#xff0c;也有自带的文件系统. 它的操作和C、c差不多&#xff0c;不过也需要我们来了解一下。 输入输出设备类 QObject 有一个子类&#xff0c;名为 QIODevice 类&#xff0c;如其名字&#xff0c;该类是管理所有输入输出设备的类。 比如文件、网络套…

软件测试技术(一):软件测试流程

软件测试流程 软件测试流程如下&#xff1a; 测试计划测试设计测试执行 单元测试集成测试确认测试系统测试验收测试回归测试验证活动 测试计划 测试计划由测试负责人来编写&#xff0c;用于确定各个测试阶段的目标和策略。这个过程将输出测试计划&#xff0c;明确要完成的测…

Excel如何设置自动更新的固定选项

日常工作中你是否想要某数据列设置固定选项&#xff0c;如人力组、财务组、综合组、业务组等&#xff0c;可用“数据验证”实现&#xff0c;如后期新增选项“党建组”&#xff0c;该如何快速处理&#xff1f; 今天刘小生分享“超级表数据验证”方式&#xff0c;只实现固定选项…

Java 项目学习(初始化项目)

后端工程基于 maven 进行项目构建&#xff0c;并且进行分模块开发 参考&#xff1a;Spring或Spring Boot项目目录结构划分和代码分层 1、了解项目的整体结构 sky-take-out maven 父工程&#xff0c;统一管理依赖版本&#xff0c;聚合其他子模块 sky-common 子模块&#xff0c…

Maven私服批量上传pom和jar实操

Maven私服上传pom和jar实操-CSDN博客 Maven私服上传jar实操_maven fakepath-CSDN博客 之前写过两篇向maven私服上传jar的操作&#xff0c;看到阅读量还可以&#xff0c;觉得应该有很多人有这个需求&#xff0c;所以这次再放一个大招&#xff0c;通过批量的方式向私服传jar和p…

2024最新版:C++用Vcpkg搭配VS2022安装matplotlib-cpp库

matplotlib-cpp是一个用于在C中使用matplotlib绘图库的头文件库。它提供了一个简单的接口&#xff0c;使得在C中创建和显示图形变得更加容易。这个库的灵感来自于Python的matplotlib库&#xff0c;它使得在C中进行数据可视化变得更加便捷。 matplotlib-cpp允许在C中使用类似Py…

【R语言】数据可视化分析和统计检验——线性和线性混合效应模型

R语言数据可视化分析和统计检验 写在前面1、数据读取及分析2、组间均值和标准差统计分析3、图像数据探索3.1 图像绘制&#xff08;查看是否存在极端数据&#xff0c;以及数据分布情况&#xff09;3. 2 数据标准化&#xff08;Z-scores&#xff09;3.3 绘制数据相关性 4、ggplot…

杭州电子科技大学2024年成人高等继续教育招生简章

杭州电子科技大学&#xff0c;作为一所享有盛誉的高等学府&#xff0c;始终致力于为社会培养优秀的人才。2024年&#xff0c;学校敞开大门&#xff0c;为广大有志于进一步提升自身学识与技能的成年人提供了难得的机会——成人高等教育招生。 此次招生不仅彰显了杭州电子科技大…

轻量级的数据交换格式JSON (JavaScript Object Notation)介绍

什么是JSON&#xff1f; JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式&#xff0c;它属于JavaScript的一个子集&#xff0c;采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 JSON具有易读性&…

FFmpeg+ZLMediaKit 超低延时推流

FFmpeg超低延时推流命令 ffmpeg -rtbufsize 4M -i rtsp://admin:abcd1234192.168.2.162:554/h264/ch1/main/av_stream \-c:v libx264 -preset ultrafast -tune zerolatency -x264-params keyint30:min-keyint30:scenecut0 -g 30 \-c:a aac -b:a 128k -ar 44100 -ac 2 -strict …

微型导轨的摩擦系数分析!

微型导轨的摩擦力主要包括滑动摩擦力和滚动摩擦力&#xff0c;摩擦系数是一个关键参数&#xff0c;它决定了滑块在导轨上运动时所受到的摩擦力大小&#xff0c;摩擦系数越低&#xff0c;系统的运动效率和精度就越高&#xff0c;而微型导轨的摩擦系数是受多个因素影响的。 微型导…

【PL理论】(33) 类型系统:推导树证明 φ ⊢ e∶t | 继续定义关系:γ ⊢ e∶t

&#x1f4ac; 写在前面&#xff1a;本章我们将讲解推导树证明&#xff0c;推导树实际上就是推理规则的应用。只要学会如何选择并应用适当的推理规则&#xff0c;证明就不是难事了。 目录 0x00 推导树证明 &#x1d753; ⊢ &#x1d486; ∶ &#x1d495; 0x01 继续定义关…

振动分析-5-基于CNN的机械故障诊断方法

参考基于CNN的机械故障诊断方法 CNN之图像识别 预训练模型迁移学习&#xff08;Transfer Learning&#xff09; 基于卷积神经网络&#xff08;CNN&#xff09;的深度迁移学习在声发射&#xff08;AE&#xff09;监测螺栓连接状况的应用 参考基于CNN的机械故障诊断所面临的困难和…

护眼指南:精选适合学生写作业的台灯推荐

当前&#xff0c;近视问题在人群中愈发普遍&#xff0c;据2024年的统计数据显示&#xff0c;我国儿童青少年的总体近视率已高达52.7%。在繁重的学业压力下&#xff0c;学生的视力健康日益受到关注,近视背后潜藏着诸多眼部并发症的风险&#xff0c;包括但不限于视网膜脱离、视网…

ATFX汇市:英国5月核心CPI年率下降0.4百分点,GBPUSD不跌反涨

ATFX汇市&#xff1a;据英国统计局数据&#xff0c;英国5月核心CPI年率为3.5%&#xff0c;低于前值3.9%&#xff1b;英国5月名义CPI年率为2%&#xff0c;低于前值2.3%。核心CPI年率和名义CPI年率相比前值分别下降0.4个百分点和0.3百分点&#xff0c;意味着英国的通胀率仍处于快…

Nidhogg:一款专为红队设计的多功能Rootkit

关于Nidhogg Nidhogg是一款专为红队设计的多功能Rootkit&#xff0c;该工具的主要目的是为红队研究人员提供一个多合一的切易于使用的多功能Rootkit&#xff0c;并允许研究人员通过单个头文件来将其引入到自己的C2框架之中。 当前版本的Nidhogg支持任意版本的x64 Windows 10和…