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
英文地址,請注明出處:http://en.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 …