当前位置: 首页 > news >正文

VUE+SPRINGBOOT从0-1打造前后端-前后台系统-视频列表与视频播放

在现代Web开发中,视频播放功能已成为许多网站的基本需求。本文将基于Vue.js框架,详细讲解如何实现一个视频列表与播放器交互的功能模块。这个组件可以让用户点击列表中的视频项来播放对应的视频,并支持再次点击关闭播放器。

功能概述

我们实现的功能包括:

  1. 展示视频列表,包含视频名称和大小信息

  2. 点击视频名称可展开播放器播放对应视频

  3. 再次点击同一视频可关闭播放器

  4. 响应式设计,适配不同屏幕尺寸

代码解析

模板部分

<template><div class="video-container" style="padding: 10px"><el-card><!-- 视频列表 --><div v-for="item in videoList" :key="item.id"style="margin: 10px 0;padding: 10px 0;color: #666666;border-bottom: 1px dashed #cccccc"><div style="display: flex; justify-content: space-between; align-items: center;"><span style="font-size: 18px;cursor: pointer" class="item"@click="playVideo(item)">{{ item.name }}</span><span style="font-size: 12px;">文件大小:{{ (item.size / 1000).toFixed(2) }}M</span></div><!-- 视频播放器 (只在当前选中视频时显示) --><div v-if="currentVideo && currentVideo.id === item.id" style="margin-top: 15px;"><videocontrolsautoplay:src="currentVideo.url"style="width: 100%; max-height: 500px; background: #000;">您的浏览器不支持 HTML5 video 标签。</video><div style="margin-top: 10px; color: #999; font-size: 14px;">{{ currentVideo.description || '暂无描述' }}</div></div></div></el-card></div>
</template>

关键点解析:

  1. 使用v-for指令循环渲染视频列表

  2. 每个视频项包含名称和大小信息

  3. 视频名称添加了点击事件@click="playVideo(item)"

  4. 使用v-if条件渲染,只在当前选中视频时显示播放器

  5. 播放器使用HTML5的<video>标签,并添加了controlsautoplay属性

脚本部分

<script>
export default {name: "VideoPlayer",data() {return {videoList: [{id: 1,name: "心愿",url: "https://chelaike.oss-cn-beijing.aliyuncs.com/wx_clue_pic/20250713105505_4d803e6f.mp4",size: 1024000,description: "心愿"},// 其他视频项...],currentVideo: null}},methods: {playVideo(video) {if (this.currentVideo && this.currentVideo.id === video.id) {// 如果点击的是当前正在播放的视频,则关闭播放器this.currentVideo = null;} else {// 否则播放选中的视频this.currentVideo = {...video};}}}
}
</script>

关键点解析:

  1. videoList数组存储所有视频数据,每个视频对象包含id、name、url、size和description属性

  2. currentVideo存储当前正在播放的视频,初始为null

  3. playVideo方法处理视频点击逻辑:

    • 如果点击的是当前播放的视频,则关闭播放器(设置currentVideo为null)

    • 否则,设置currentVideo为选中的视频对象

样式部分

<style scoped>
.video-container {max-width: 1200px;margin: 0 auto;
}.item:hover {color: #409EFF;
}
</style>

关键点解析:

  1. scoped属性确保样式只作用于当前组件

  2. 限制容器最大宽度为1200px并居中显示

  3. 鼠标悬停时视频名称变色,提升用户体验

功能扩展建议

  1. 视频分类:可以添加分类标签,实现按分类筛选视频

  2. 分页加载:对于大量视频,可以实现分页或无限滚动加载

  3. 播放历史:记录用户观看历史,方便回看

  4. 全屏播放:添加全屏播放按钮,提升观看体验

  5. 播放进度保存:使用localStorage保存视频播放进度

性能优化建议

  1. 懒加载:只有当视频进入可视区域时才加载视频资源

  2. 预加载:可以预加载下一个视频的部分内容,减少等待时间

  3. 缩略图:为每个视频添加缩略图,提升用户体验

  4. 视频格式检测:检测浏览器支持的视频格式,提供最佳兼容性

兼容性考虑

  1. 使用<video>标签的fallback内容处理不支持HTML5 video的浏览器

  2. 考虑提供多种视频格式(如MP4、WebM)以确保跨浏览器兼容

  3. 对于移动设备,可能需要特别处理自动播放策略

总结

本文详细讲解了一个基于Vue.js的视频列表与播放器交互组件的实现。通过这个示例,我们学习了:

  • Vue的列表渲染(v-for)

  • 条件渲染(v-if)

  • 事件处理(@click)

  • 响应式数据管理

  • HTML5视频标签的使用

这个组件结构清晰,功能完善,可以作为视频网站的基础组件使用。开发者可以根据实际需求进行扩展和优化。

希望这篇文章对您有所帮助!如果您有任何问题或建议,欢迎在评论区留言讨论。

http://www.dtcms.com/a/321149.html

相关文章:

  • 【嵌入式C语言】
  • C语言:结构体
  • mac电脑解决在不同项目需要频繁手动切换node版本的困扰
  • Autosar AP功能组状态和模型进程是否预定义后不改变了?
  • Mac 电脑放在环境变量中的通用脚本
  • 从浅拷贝到深拷贝:C++赋值运算符重载的核心技术
  • SITIME汽车时钟发生器Chorus保障智能汽车安全
  • 《告别Bug!GDB/CGDB调试实战指南》
  • 「iOS」————优先级反转
  • 解决Docker部署的MySQL8错误日志里面的 mbind: Operation not permitted 问题
  • 构建安全 Web 应用:从用户认证与授权到 JWT 原理解析
  • python使用python-docx自动化操作word
  • 【杂谈】-逆缩放悖论:为何更多思考会让AI变“笨“?
  • Numpy科学计算与数据分析:Numpy布尔索引与花式索引实战
  • 一种对白点进行多重加权并利用三角剖分插值微调白平衡增益的白平衡矫正算法
  • RAG问答系统:Spring Boot + ChromaDB 知识库检索实战
  • 3D Tiles 格式中,Bounding Volum
  • 基于AutoDL平台的3D_Gaussian_Splatting初体验
  • 在 Vue 中使用 ReconnectingWebSocket实现即时通讯聊天客服功能
  • 2025 前端真实试题-阿里面试题分析
  • 关于数据结构6-哈希表和5种排序算法
  • Maptalks vs Cesium
  • 【最新版】2025年搜狗拼音输入法
  • “电子合同”为什么会出现无效的情况?
  • OpenCV cv2.flip() 函数详解与示例
  • 深入理解 Java AWT Container:原理、实战与性能优化
  • ORACLE看当前连接数的方法
  • 柠檬笔试——野猪骑士
  • 南方略咨询与与清源科技正式启动国际市场GTM流程规划咨询项目!!!
  • 汽车电子:现代汽车的“神经中枢“