欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > 【Vue】vue3 video 保存视频进度,每次进入加载上次的视频进度

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

2025/5/17 11:23:48 来源:https://blog.csdn.net/IAIPython/article/details/145153840  浏览:    关键词:【Vue】vue3 video 保存视频进度,每次进入加载上次的视频进度
  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()
})// ... 其他代码保持不变

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

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词