【Vue】vue3 video 保存视频进度,每次进入加载上次的视频进度

embedded/2025/1/18 23:29:09/
  1. 使用 localStorage 存储每个视频的播放进度
  2. 在组件加载时恢复上次的播放进度
  3. 在视频播放过程中实时保存进度
  4. 在组件卸载前保存最终进度
  5. 使用 timeupdate 事件来监听视频播放进度的变化

在模板中为视频元素添加事件监听:

<videoloopautoplaycontrols:id="`video_${index}`":src="getVideoSrc(video.src)"class="video"@loadedmetadata="loadVideoProgress"></video>
// ... 其他导入保持不变
import { reactive, ref, onMounted, onBeforeUnmount } from 'vue'// ... paramsList 和 params 保持不变// 添加视频进度保存的常量
const VIDEO_PROGRESS_KEY = 'VIDEO_PROGRESS'const videoList = ref([{title: '大范围流场图',src: 'dfwlct',isPlaying: true,progress: 0, // 添加进度属性},{title: '工程局部流场图',src: 'gcjblct',isPlaying: true,progress: 0, // 添加进度属性},
])// 加载保存的视频进度
const loadVideoProgress = () => {const savedProgress = localStorage.getItem(VIDEO_PROGRESS_KEY)if (savedProgress) {const progressData = JSON.parse(savedProgress)videoList.value.forEach((video, index) => {if (progressData[video.src]) {video.progress = progressData[video.src]const videoElement = document.getElementById(`video_${index}`) as HTMLVideoElementif (videoElement) {videoElement.currentTime = video.progress}}})}
}// 保存视频进度
const saveVideoProgress = () => {const progressData = {}videoList.value.forEach((video, index) => {const videoElement = document.getElementById(`video_${index}`) as HTMLVideoElementif (videoElement) {progressData[video.src] = videoElement.currentTime}})localStorage.setItem(VIDEO_PROGRESS_KEY, JSON.stringify(progressData))
}// 监听视频时间更新
const handleTimeUpdate = (index: number) => {const videoElement = document.getElementById(`video_${index}`) as HTMLVideoElementif (videoElement) {videoList.value[index].progress = videoElement.currentTimesaveVideoProgress()}
}// 组件挂载时加载进度
onMounted(() => {loadVideoProgress()// 为每个视频添加时间更新事件监听videoList.value.forEach((_, index) => {const videoElement = document.getElementById(`video_${index}`)if (videoElement) {videoElement.addEventListener('timeupdate', () => handleTimeUpdate(index))}})
})// 组件卸载前移除事件监听
onBeforeUnmount(() => {videoList.value.forEach((_, index) => {const videoElement = document.getElementById(`video_${index}`)if (videoElement) {videoElement.removeEventListener('timeupdate', () => handleTimeUpdate(index))}})saveVideoProgress()
})// ... 其他代码保持不变

这样,用户每次进入页面时都会自动加载上次观看的进度。进度信息会在以下情况下保存:

  • 视频播放过程中
  • 用户暂停视频时
  • 用户离开页面时

http://www.ppmy.cn/embedded/155074.html

相关文章

Gitlab搭建npm仓库

由于图片和格式解析问题&#xff0c;为了更好阅读体验可前往 阅读原文 使用gitlab的仓库注册表特性需要版本14.0&#xff0c;如果你的版本比较低&#xff0c;请先根据自己的需求合理升级后再使用 npm私有仓库的搭建方式有很多种&#xff0c;比如使用docker(阅读此篇)&#xff…

Python爬虫学习前传 —— Python从安装到学会一站式服务

早上好啊&#xff0c;大佬们。我们的python基础内容的这一篇终于写好了&#xff0c;啪唧啪唧啪唧…… 说实话&#xff0c;这一篇确实写了很久&#xff0c;一方面是在忙其他几个专栏的内容&#xff0c;再加上生活学业上的事儿&#xff0c;确实精力有限&#xff0c;另一方面&…

C 语言运算符的优先级和结合性

运算符的结合性和优先级 优先级运算符描述结合性1()[]->.函数调用、数组下标、结构体 / 联合体成员通过指针访问、结构体 / 联合体成员访问从左到右2!~ (前缀)-- (前缀) (一元)- (一元)* (间接寻址)& (取地址)sizeof(type)逻辑非、按位取反、前缀自增、前缀自减、一元正…

微服务学习-快速搭建

1. 速通版 1.1. git clone 拉取项目代码&#xff0c;导入 idea 中 git clone icoolkj-microservices-code: 致力于搭建微服务架构平台 1.2. git checkout v1.0.1版本 链接地址&#xff1a;icoolkj-microservices-code 标签 - Gitee.com 2. 项目服务结构 3. 实现重点步骤 …

以太坊(概念与原理)

特点 以太坊是”世界计算机“&#xff0c;开源的、全球分布的计算机基础设施。执行称为智能合约的程序使用区块链来同步和存储系统状态以及名为以太币的加密货币&#xff0c;以计量和约束执行资源成本本质是一个基于交易的状态机以太坊平台使开发人员能够构建具有内置经济功能…

Mac的`~键打出来±§`?解析ANSI、ISO、JIS键盘标准的区别与布局

注&#xff1a;本文由deepseek生成&#xff0c;只进行了基本的校对。 引言 在使用Mac时&#xff0c;你是否遇到过这样的问题&#xff1a;按下~键&#xff0c;却输出了或&#xff1f;这其实是因为你的键盘类型设置与物理键盘布局不匹配。Mac支持多种键盘标准&#xff0c;包括A…

python之二维几何学习笔记

一、概要 资料来源《机械工程师Python编程&#xff1a;入门、实战与进阶》安琪儿索拉奥尔巴塞塔 2024年6月 点和向量&#xff1a;向量的缩放、范数、点乘、叉乘、旋转、平行、垂直、夹角直线和线段&#xff1a;线段中点、离线段最近的点、线段的交点、直线交点、线段的垂直平…

基于华为云车牌识别服务设计的停车场计费系统【华为开发者空间-鸿蒙】

文章目录 手把手的技术干货教程&#xff0c;记录从0到1的开发过程。一、前言1.1 内容简介1.2 云主机1.3 开发环境1.4 功能说明 二、华为云开发者空间2.1 进入开发者空间2.2 配置云主机2.3 安装系统2.4 启动云主机2.5 全屏切换2.6 共享桌面2.5 测试Python开发环境2.6 安装reques…