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.pswp.cn/pingmian/92552.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/92552.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解 Seaborn:让数据可视化更简单高效的 Python 库

在数据科学领域&#xff0c;可视化是理解数据、挖掘规律的重要手段。今天要为大家介绍的 Seaborn 库&#xff0c;正是数据可视化领域的一把 “利器”。它基于 Matplotlib 开发&#xff0c;却凭借更简洁的接口和更美观的默认样式&#xff0c;成为众多数据分析师的首选工具。下面…

Cesium1.95中如何高效管理 1500 个高频实体

一、建议&#xff1a;不要频繁创建/销毁&#xff0c;而是复用对象&#xff1b;​​​​使用 CallbackProperty更新位置而不是删了重建&#xff1b;​​​​对大量 Billboard / Polyline / Label&#xff0c;优先使用对应的 *Collection&#xff0c;然后批量更新&#xff1b;​​…

全面了解机器语言之kmeans

深入理解 KMeans 聚类算法&#xff1a;原理、实现与应用在机器学习领域&#xff0c;聚类算法作为无监督学习的核心技术之一&#xff0c;一直以来都是数据挖掘和模式识别的重要工具。其中&#xff0c;KMeans 算法以其简洁的原理、高效的计算性能和广泛的适用性&#xff0c;成为最…

纳米陶瓷与光子集成:猎板PCB定义下一代VR硬件的技术蓝图

虚拟现实&#xff08;VR&#xff09;设备正从“视觉沉浸”向“多感官无感交互”演进&#xff0c;其底层PCB技术面临带宽、算力密度与动态可靠性的三重挑战。作为国内高端PCB技术的引领者&#xff0c;​​猎板PCB​​以材料革新、光电子融合与智能响应为核心&#xff0c;构建了适…

Linux ssh-keygen系列命令与ssh命令的使用

关联文章 Linux ssh 免密登录配置&#x1f44d;对日开发 TeraTerm 批量向各台服务器传输文件SSH 教程&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d; 目录一. ssh-keygen相关命令1.1 简介1.2 生成密钥1.3 ssh-copy-id 上传公钥到指定的服务…

从C++0基础到C++入门 (第二十五节:指针【所占内存空间】)

目录 一. 指针所占内存空间 1.1 验证指针大小的代码示例 1.2 不同系统架构下的差异 1.3 指针大小与类型无关 1.4 空指针的大小 1.5 多级指针的大小 1.6 实际应用中的注意事项 一. 指针所占内存空间 指针在内存中占用的空间大小取决于系统架构和编译环境。 32位系统中指…

Windows选择文件自动删除及输入框自动打字的解决办法

觉得有帮助麻烦您动动发财的小手点赞、收藏、加关注&#xff0c;感谢&#xff01; 运行环境&#xff1a;windows10 现象&#xff1a;鼠标点击任何文件&#xff0c;上下键选择任何文件都会自动放入回收站并弹警告框&#xff0c;鼠标放入输入框会自动打一串字符&#xff0c;删除…

大模型 MCP服务案例详细讲解

大模型与 MCP(Model Context Protocol)服务器的交互是一个双向、异步、流式的过程,涉及协议解析、函数调用、实时数据交换等关键环节。下面我将详细解释整个交互流程,结合具体示例和时序图说明。 🔄 核心交互流程图 #mermaid-svg-Adxo4FoP4oRzAJdV {font-family:"tr…

MVCC和日志

MVCC是一种并发控制的方法&#xff0c;在数据库管理系统中&#xff0c;实现对数据库的并发访问&#xff0c;在编程语言中实现事务内存主要是为了提高数据库并发性能&#xff0c;更好的处理读写冲突&#xff0c;做到即使有读写冲突时&#xff0c;也能做到不加锁&#xff0c;非阻…

Redis源码安装 Failed to configure LOCALE for invalid locale name 报错解决

源码安装之后 报错 Failed to configure LOCALE for invalid locale name原因是redis 8.0 需要配置字符集 只需要在环境变量中添加 LANGen_US.utf8 即可&#xff0c; 在配置之前先查看当前系统中存在哪些字符集 locale -a然后在 /etc/profile 环境变量中添加配置 LANGen_US.ut…

跑酷小游戏2.0

emm&#xff0c;下面是1.0版本的&#xff0c;我问了下AI&#xff0c;出了第四关&#xff0c;按步骤更新吧。其实是我也搞不懂AI在说啥//跑酷游戏C版 #include<bits/stdc.h> #include<windows.h> #include<stdio.h> #include<conio.h> #include<tim…

相比于传统的全波分析,特征模分析具有哪些优点

相比传统的全波分析&#xff08;Full-Wave Analysis&#xff0c;直接求解电场/电流分布&#xff09;&#xff0c;特征模分析&#xff08;Characteristic Mode Analysis&#xff0c;CMA&#xff09;的优点主要体现在物理可解释性、设计指导性和计算效率三个方面。1. 物理机理更清…

UE材质World Position 和 Object Position

Object Position 是 物体原点在世界坐标系下的位置 World Position 是 物体上的这个点 在世界坐标系下的位置 Actor Position 是 物体轴点位置 WorldPosition - ObjectPosition 是一个从物体原点&#xff08;pivot&#xff09;指向物体上该点的向量&#xff08;方向&#x…

github上传文件

git remote add origin https://github.com/Ineedstrong/socket-practice.git如果不行的情况下git remote set-url origin gitgithub.com:Ineedstrong/socket-practice.git就以这种方式3. 使用 SSH 替代 HTTPS&#xff08;推荐&#xff09;绕过 HTTPS 的 TLS 问题&#xff1a;生…

【STM32U385RG 测评】基于VSCode的STM32开发环境搭建

【STM32U385RG 测评】搭建基于VSCode的STM32开发环境 文章目录【STM32U385RG 测评】搭建基于VSCode的STM32开发环境一、安装软件1.1 安装VSCode1.2 安装STM32CubeMX1.3 安装STM32CubeCLT1.4 安装ST-MCU-FINDER-PC二、安装插件2.1 安装 STM32Cube for VSCode插件三、创建项目3.1…

设计模式(二)——策略模式

一、基本概念 既然你已经接触到了设计模式&#xff0c;那你大概率你写过类似这样的代码&#xff1a;根据不同的选择条件&#xff08;如排序、搜索或路由&#xff09;执行不同的代码逻辑。通常的解决方案是使用if-else或switch语句&#xff0c;但这些条件判断有一个最大的问题是…

MySQL基础知识总结

一、MySQL简述 数据库 是一个有组织的集合&#xff0c;用于存储和管理数据的系统。它是一个软件系统&#xff0c;被设计用来存储、检索和管理数据&#xff0c;并提供数据的快速访问和处理。数据库可以被看作是一种特殊的文件系统&#xff0c;但与传统的文件系统不同的是&#…

数据仓库命名规范

1. 概述 数据模型是数据管理的分析工具和交流的有力手段&#xff1b;同时&#xff0c;还能够很好地保证数据的一致性&#xff0c;是实现商务智能&#xff08;Business Intelligence&#xff09;的重要基础。因此建立、管理一个企业级的数据模型&#xff0c;应该遵循标准的命名…

FlinkSQL Joins全解析

1. Lookup Join用途&#xff1a;用于流表与外部维表&#xff08;静态或缓慢变化表&#xff09;的关联&#xff08;如 MySQL、HBase 等&#xff09;。特点&#xff1a;通过 实时查询外部存储 获取维度数据。仅支持 处理时间&#xff08;Processing Time&#xff09;语义&#xf…

【FileZilla】基于 FTP 的 Windows 和 Linux 文件传输

在嵌入式开发过程中我们经常需要在 Windows 和 Linux 下进行文件传输&#xff0c;本文就介绍一种通过 FTP 实现 Windows 和 Linux 文件传输的方法。 Windows 为物理主机&#xff0c;Linux 是在 Vmware 虚拟机中安装运行的 Ubuntu&#xff0c;版本为 18.04。 Ubuntu 安装 FTP …