VideoPlayer 通用视频播放器组件
一个功能完整的Vue3视频播放器组件,支持播放控制、倍速调节、音量控制、全屏播放等功能。
功能特性
一个功能完整的Vue3视频播放器组件,支持播放控制、倍速调节、音量控制、全屏播放等功能。
功能特性
- ✅ 播放/暂停控制
- ✅ 进度条拖拽
- ✅ 音量控制
- ✅ 倍速播放 (0.5x - 2x)
- ✅ 画中画功能
- ✅ 全屏播放
- ✅ 自动隐藏控制栏
- ✅ 响应式设计
- ✅ 加载状态显示
- ✅ 错误处理
- ✅ 自定义封面图
- ✅ 循环播放
- ✅ 自动播放
基本用法
<template>
<VideoPlayer
:src="videoUrl"
:poster="coverUrl"
:controls="true"
:autoplay="false"
width="800px"
height="450px"
@play="handlePlay"
@pause="handlePause"
/>
</template>
<script setup>
import VideoPlayer from '@/components/VideoPlayer/index.vue'
const videoUrl = 'https://example.com/video.mp4'
const coverUrl = 'https://example.com/cover.jpg'
const handlePlay = () => {
console.log('视频开始播放')
}
const handlePause = () => {
console.log('视频暂停')
}
</script>
Props 属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| src | String | - | 视频源地址(必填) |
| poster | String | ‘’ | 封面图地址 |
| controls | Boolean | true | 是否显示控制栏 |
| autoplay | Boolean | false | 是否自动播放 |
| loop | Boolean | false | 是否循环播放 |
| muted | Boolean | false | 是否静音 |
| showPlayButton | Boolean | true | 是否显示播放按钮 |
| width | String/Number | ‘100%’ | 播放器宽度 |
| height | String/Number | ‘auto’ | 播放器高度 |
Events 事件
| 事件名 | 参数 | 说明 |
|---|---|---|
| play | - | 视频开始播放时触发 |
| pause | - | 视频暂停时触发 |
| ended | - | 视频播放结束时触发 |
| timeupdate | currentTime | 播放时间更新时触发 |
| loadedmetadata | - | 视频元数据加载完成时触发 |
| error | - | 视频加载错误时触发 |
Methods 方法
通过 ref 可以调用以下方法:
<template>
<VideoPlayer ref="playerRef" :src="videoUrl" />
<button @click="playVideo">播放</button>
<button @click="pauseVideo">暂停</button>
</template>
<script setup>
import { ref } from 'vue'
import VideoPlayer from '@/components/VideoPlayer/index.vue'
const playerRef = ref()
const playVideo = () => {
playerRef.value.play()
}
const pauseVideo = () => {
playerRef.value.pause()
}
const seekTo = (time) => {
playerRef.value.seek(time) // 跳转到指定时间
}
const setVolume = (volume) => {
playerRef.value.setVolume(volume) // 设置音量 (0-100)
}
const setSpeed = (rate) => {
playerRef.value.setPlaybackRate(rate) // 设置播放速度
}
</script>
使用场景
1. 模板预览
<VideoPlayer
:src="template.video_url"
:poster="template.cover_url"
:autoplay="true"
:loop="true"
width="100%"
height="400px"
/>
2. 视频详情页
<VideoPlayer
:src="videoDetail.url"
:poster="videoDetail.poster"
:controls="true"
:show-play-button="true"
width="100%"
height="500px"
@play="onVideoPlay"
@ended="onVideoEnded"
/>
3. 视频列表缩略图
<VideoPlayer
:src="item.video_url"
:poster="item.cover_url"
:controls="false"
:show-play-button="false"
:muted="true"
width="200px"
height="150px"
/>
4. 全屏视频播放
<VideoPlayer
:src="videoUrl"
:controls="true"
:autoplay="false"
width="100vw"
height="100vh"
/>
样式自定义
组件使用了CSS变量,可以通过覆盖这些变量来自定义样式:
.video-player {
--primary-color: #409eff;
--control-bg: rgba(0, 0, 0, 0.8);
--control-text: #fff;
--progress-bg: rgba(255, 255, 255, 0.3);
--progress-buffer: rgba(255, 255, 255, 0.5);
}
注意事项
- 自动播放限制:现代浏览器对自动播放有限制,建议配合
muted属性使用 - 全屏支持:需要浏览器支持 Fullscreen API
- 视频格式:建议使用 MP4 格式以获得最佳兼容性
- 响应式设计:组件已适配移动端,在小屏幕设备上会自动调整控制栏布局
浏览器兼容性
- Chrome 60+
- Firefox 55+
- Safari 12+
- Edge 79+
更新日志
v1.0.0
- 初始版本发布
- 支持基本的播放控制功能
- 支持倍速播放和全屏功能
- 响应式设计适配移动端
作者:聂盼盼 创建时间:2025-10-27 23:06
最后编辑:聂盼盼 更新时间:2025-10-28 19:53
最后编辑:聂盼盼 更新时间:2025-10-28 19:53