# vueVideo++
**Repository Path**: wlscs/vue-video
## Basic Information
- **Project Name**: vueVideo++
- **Description**: 一个基于 Vue 3 开发的功能丰富、高度可定制的现代化视频播放器组件
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 21
- **Forks**: 4
- **Created**: 2024-10-27
- **Last Updated**: 2026-01-26
## Categories & Tags
**Categories**: vue-extensions
**Tags**: None
## README
# 🎬vuevideoplus
一个基于 **Vue 3** 开发的功能丰富、高度可定制的现代化视频播放器组件
[](https://www.npmjs.com/package/vue-video-plus)
[](https://github.com/yourusername/vue-video-plus/blob/master/LICENSE)
[](https://www.npmjs.com/package/vue-video-plus)
---
### 📮 联系作者
有任何疑问可以给我发邮件或者加 QQ
📧 **邮箱**: 250219234@qq.com
💬 **QQ**: 250219234
---
## ✨ 特性
- 🎨 **主题定制** - 支持纯色/渐变主题,可自定义播放器颜色
- 📱 **响应式设计** - 完美适配桌面端和移动端
- 🎯 **丰富功能** - 倍速播放、画中画、全屏、关灯模式等
- ⌨️ **快捷键支持** - 空格播放/暂停、方向键快进快退、音量调节
- 🔄 **自动播放策略** - 智能处理浏览器自动播放限制
- 🎭 **镜像画面** - 支持视频镜像翻转
- 🔊 **音量记忆** - 自动记住用户音量设置
- 🎬 **循环播放** - 支持视频循环播放
- 💡 **关灯模式** - 沉浸式观看体验
- 🎪 **多种动画** - 播放按钮支持多种切换动画效果
- 🛠️ **TypeScript** - 完整的类型定义支持
## 📦 安装
### npm
```bash
npm install vue-video-plus
```
### pnpm
```bash
pnpm add vue-video-plus
```
### yarn
```bash
yarn add vue-video-plus
```
## 🚀 快速开始
### 全局注册
```javascript
import { createApp } from 'vue'
import App from './App.vue'
// 引入组件和样式
import VueVideoPlus from 'vue-video-plus'
import 'vue-video-plus/dist/style.css'
const app = createApp(App)
app.use(VueVideoPlus)
app.mount('#app')
```
### 组件内使用
```vue
```
> 💡 **提示**:将视频文件放在项目根目录的 `public/videos/` 文件夹中,然后使用 `/videos/your-video.mp4` 路径引用。
## 📖 配置项
### 基础配置
| 参数 | 说明 | 类型 | 默认值 |
|-----|------|------|--------|
| `src` | 视频源地址 | `String` | 演示视频 URL |
| `width` | 播放器宽度(桌面端) | `String` | `'1080px'` |
| `height` | 播放器高度(桌面端) | `String` | `'608px'` |
| `title` | 视频标题 | `String` | `''` |
| `type` | 视频类型 | `String` | `'video/mp4'` |
| `poster` | 视频封面图 | `String` | `''` |
| `autoPlay` | 自动播放 | `Boolean` | `true` |
| `muted` | 静音 | `Boolean` | `true` |
| `volume` | 默认音量(0-1) | `Number` | `0.3` |
| `loop` | 循环播放 | `Boolean` | `false` |
| `currentTime` | 初始播放时间(秒) | `Number` | `0` |
| `control` | 是否显示控制器 | `Boolean` | `true` |
| `preload` | 预加载策略 | `String` | `'auto'` |
#### 📹 视频源地址 (src) 详细说明
**默认值**:`http://www.jplayer.org/video/m4v/Incredibles_Teaser.m4v`(演示视频)
播放器支持多种视频源格式,你可以根据需要选择:
**1️⃣ 使用在线视频(推荐用于生产环境)**
```vue
```
**2️⃣ 使用本地视频文件**
在项目根目录创建 `public` 文件夹(如果还没有),将视频文件放入:
```
your-project/
├── public/
│ └── videos/
│ └── demo.mp4
├── src/
└── package.json
```
然后使用相对路径引用:
```vue
```
**3️⃣ 导入本地视频(适用于较小的视频)**
```vue
```
**4️⃣ 使用默认演示视频(快速测试)**
```vue
```
**⚠️ 注意事项**:
- 支持的格式:MP4、WebM、Ogg 等浏览器原生支持的格式
- HLS(.m3u8)需要配合 hls.js 使用(见下方 FAQ)
- 建议使用 `public` 文件夹存放视频,避免打包体积过大
- 跨域视频需要服务器配置 CORS
### 主题配置
| 参数 | 说明 | 类型 | 默认值 |
|-----|------|------|--------|
| `colorStart` | 主题起始颜色 | `String` | `'#52a0fd'` |
| `colorEnd` | 主题结束颜色(空字符串为纯色,否则渐变) | `String` | `'#00e2fa'` |
| `borderRadius` | 播放器圆角 | `String` | `'8px'` |
**主题示例:**
```javascript
// 纯色主题
{ colorStart: '#52a0fd', colorEnd: '' }
// 渐变主题
{ colorStart: '#52a0fd', colorEnd: '#00e2fa' }
```
### 功能配置
| 参数 | 说明 | 类型 | 默认值 |
|-----|------|------|--------|
| `speed` | 是否支持快进快退 | `Boolean` | `true` |
| `speedRate` | 倍速选项 | `Array` | `['2.0', '1.5', '1.25', '1.0', '0.75', '0.5']` |
| `mirror` | 镜像画面 | `Boolean` | `false` |
| `lightOff` | 关灯模式 | `Boolean` | `false` |
| `webFullScreen` | 网页全屏 | `Boolean` | `false` |
| `playsinline` | iOS 内联播放(不全屏) | `Boolean` | `false` |
### UI 配置
| 参数 | 说明 | 类型 | 默认值 |
|-----|------|------|--------|
| `playBtnPosition` | 中央播放按钮位置 | `String` | `'center'` |
| `playBtnAnimation` | 播放按钮切换动画 | `String` | `'scale'` |
| `controlBtns` | 显示的控制按钮 | `Array` | 见下方说明 |
**playBtnPosition 可选值:**
- `'center'` - 居中
- `'bottom-right'` - 右下角
- `'bottom-left'` - 左下角
**playBtnAnimation 可选值:**
- `'rotate'` - 旋转
- `'scale'` - 缩放
- `'flip'` - 翻转
- `'slide'` - 滑动
- `'none'` - 无动画
**controlBtns 默认值:**
```javascript
[
'audioTrack', // 音轨(预留)
'quality', // 清晰度(预留)
'speedRate', // 倍速
'volume', // 音量
'setting', // 设置
'pip', // 画中画
'pageFullScreen', // 网页全屏
'fullScreen' // 全屏
]
```
### 高级配置
| 参数 | 说明 | 类型 | 默认值 |
|-----|------|------|--------|
| `playRetryTimeout` | 播放重试超时时间(毫秒) | `Number` | `500` |
## 🎮 事件
### 原生视频事件
组件支持所有原生 HTML5 视频事件:
| 事件名 | 说明 | 回调参数 |
|-------|------|---------|
| `loadstart` | 开始加载视频 | `Event` |
| `play` | 开始播放 | `Event` |
| `pause` | 暂停播放 | `Event` |
| `playing` | 播放中 | `Event` |
| `seeking` | 开始跳转 | `Event` |
| `seeked` | 跳转完成 | `Event` |
| `canplay` | 可以播放 | `Event` |
| `waiting` | 缓冲中 | `Event` |
| `durationchange` | 时长变化 | `Event` |
| `progress` | 下载进度 | `Event` |
| `timeupdate` | 播放进度更新 | `Event` |
| `ended` | 播放结束 | `Event` |
| `error` | 播放错误 | `Event` |
| `stalled` | 数据获取失败 | `Event` |
### 自定义事件
| 事件名 | 说明 | 回调参数 |
|-------|------|---------|
| `mirrorChange` | 镜像状态改变 | `(isMirror: Boolean, video: HTMLVideoElement)` |
| `loopChange` | 循环状态改变 | `(isLoop: Boolean, video: HTMLVideoElement)` |
| `lightOffChange` | 关灯模式改变 | `(isLightOff: Boolean, video: HTMLVideoElement)` |
**使用示例:**
```vue
```
## 🎯 方法
通过 `ref` 可以调用播放器实例的方法:
| 方法名 | 说明 | 参数 |
|-------|------|------|
| `play()` | 播放视频 | - |
| `pause()` | 暂停视频 | - |
| `togglePlay()` | 切换播放/暂停 | - |
**使用示例:**
```vue
```
## ⌨️ 快捷键
播放器支持以下键盘快捷键(仅桌面端):
| 快捷键 | 功能 |
|-------|------|
| `空格` | 播放/暂停 |
| `←` | 快退 10 秒 |
| `→` | 快进 10 秒 |
| `→ 长按` | 5 倍速播放 |
| `↑` | 增加音量 |
| `↓` | 减少音量 |
| `F` | 全屏/退出全屏 |
| `ESC` | 退出网页全屏 |
## 💡 完整示例
```vue
```
## 🎨 主题示例
### 纯色主题
```javascript
// 经典蓝
{ colorStart: '#52a0fd', colorEnd: '' }
// 玫瑰红
{ colorStart: '#eb3b5a', colorEnd: '' }
// 薄荷绿
{ colorStart: '#00b894', colorEnd: '' }
```
### 渐变主题
```javascript
// 科技蓝(默认)
{ colorStart: '#52a0fd', colorEnd: '#00e2fa' }
// 日落橙
{ colorStart: '#ff6b6b', colorEnd: '#ffa500' }
// 炫彩紫
{ colorStart: '#667eea', colorEnd: '#764ba2' }
// 海洋蓝
{ colorStart: '#4b7bec', colorEnd: '#3867d6' }
```
## 📱 移动端适配
播放器自动检测设备类型并适配:
- **桌面端**:使用配置的 `width` 和 `height`
- **移动端**:自动设置为 `100%` 宽度,高度按 16:9 比例计算
- **触摸支持**:移动端使用原生控制器
- **响应式**:窗口大小变化时自动调整
## 🔧 常见问题
### 1. 视频无法自动播放?
浏览器的自动播放策略要求首次自动播放必须静音。播放器已内置处理:
- 首次自动播放会先静音
- 用户交互后自动恢复音量
- 或者设置 `autoPlay: false` 让用户手动播放
### 2. 拖动进度条时音量闪烁?
这个问题已在 v1.2.4 版本修复,确保使用最新版本。
### 3. 如何支持 HLS(m3u8)视频?
播放器支持浏览器原生支持的 HLS 格式(Safari),其他浏览器需要使用 hls.js:
```javascript
import Hls from 'hls.js'
if (Hls.isSupported()) {
const hls = new Hls()
hls.loadSource('https://example.com/video.m3u8')
hls.attachMedia(videoElement)
}
```
### 4. 如何自定义控制器样式?
使用深度选择器覆盖样式:
```css
:deep(.player-wrap) {
/* 自定义样式 */
}
:deep(.control-tool) {
background: rgba(0, 0, 0, 0.8);
}
```
## 📄 License
MIT License
## 👨💻 作者
**鱿鱼溪学院**
## 🤝 贡献
欢迎提交 Issue 和 Pull Request!
---
如果这个项目对你有帮助,欢迎 ⭐ Star 支持一下!