更新记录
1.4.1(2026-10-11)
- 修复 Web 端音量调节不生效的问题:音量/静音现已真实写入底层 video 元素
longPressRate默认值由 2 调整为 3,与 Vue 版保持一致- 修复全屏切换后测量尺寸的定时器未回收的问题,组件卸载时统一清理
- 点击视频/容器后自动聚焦,桌面端键盘快捷键更易生效
- 全屏按钮新增退出态图标;菜单补充最大高度兜底,避免测量前溢出
- 为
<video>补充duration绑定(配合durationHint)
平台兼容性
uni-app x(4.66)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ |
其他
| 多语言 | 暗黑模式 | 宽屏模式 | 蒸汽模式 |
|---|---|---|---|
| × | × | √ | × |
hy-video-player-x 视频播放器
hy-video-player-x 是一个功能完整、开箱即用的视频播放器组件,基于 uni-app x(uvue + UTS) 编写。内置自定义控制层与全套手势交互:长按倍速、双击左右快进/快退、水平滑动调节进度、左侧上下滑动调节亮度、右侧上下滑动调节音量,并支持播放暂停、进度拖拽、全屏、倍速、清晰度切换等常用功能。
与 Vue2 版
hy-video-player的主要差异:本组件直接使用 uni-app x 原生video组件(同层渲染,自定义 UI 可完整覆盖),脚本采用<script setup lang="uts">写法,longPressRate默认值为 2。
功能特性
- 自定义控制层:播放/暂停、时间显示、进度条拖拽(支持点击/拖动、触摸与 Web 鼠标)、缓冲进度、全屏、倍速、清晰度、循环播放开关
- 菜单自动收起:倍速/清晰度菜单在点击播放、音量、循环、全屏、进度条等其它功能或控制层自动隐藏时自动关闭
- 控制栏自动隐藏:播放时控制栏延时自动隐藏(
autoHideDelay,默认 4000ms);打开菜单或拖拽进度条等操作过程中不会自动隐藏,操作结束或关闭菜单后重新计时;设为 0 可禁用自动隐藏 - 宽屏自适应:未设置
height时按aspectRatio(默认 16:9)随容器宽度自适应高度,电脑宽屏下高度自动缩放;显式设置height时以height为准 - 长按倍速:长按视频临时提升倍速播放,松手恢复(倍速与长按时长可配置)
- 双击快进 / 快退:双击左半屏快退、右半屏快进(步长可配置)
- 水平滑动调节进度:左右滑动实时预览目标时间,松手生效
- 垂直滑动调节亮度:左半屏上下滑动调节屏幕亮度(App / 微信小程序调用系统亮度,Web 用遮罩模拟)
- 垂直滑动调节音量:右半屏上下滑动调节音量(原生
video无音量 API,统一降级为静音开关) - 多清晰度切换:传入
sources即可在控制层切换,切换时自动保持播放进度 - 桌面端交互(Web):鼠标滚轮调节音量(Ctrl / Alt + 滚轮调节亮度);键盘快捷键:空格播放/暂停、← / → 快退/快进、↑ / ↓ 调音量、Esc 退出全屏(可通过
enableWheel、enableKeyboard关闭) - 零第三方依赖:图标全部使用内联 CSS 绘制
安装
将 hy-video-player-x 目录放入项目的 uni_modules 目录即可,组件已支持 easycom,无需手动 import。
需使用 uni-app x 项目(HBuilderX 编译到 App-Android / App-iOS / App-HarmonyOS / Web / 微信小程序)。
基本用法
<template>
<view>
<hy-video-player-x
:src="src"
poster="https://example.com/poster.png"
title="演示视频"
height="420rpx"
:autoplay="false"
:seek-step="10"
:long-press-rate="2"
theme-color="#3b7cff"
@play="onPlay"
@timeupdate=""
@ended="" />
</view>
</template>
<script setup lang="uts">
type TimeUpdatePayload = {
currentTime : number,
duration : number
}
const src = ref('https://example.com/video.mp4')
const onPlay = () => {}
const = (e : TimeUpdatePayload) => {
// e.currentTime, e.duration
}
const = () => {}
</script>
完整可运行示例见插件目录
example/example.uvue:将其拷入 uni-app x 工程并在pages.json中注册后即可预览。
属性 Props
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| src | String | '' | 视频地址 |
| poster | String | '' | 封面图地址 |
| title | String | '' | 顶部标题,为空时不显示 |
| autoplay | Boolean | false | 是否自动播放 |
| loop | Boolean | false | 是否循环播放(初始化值,可通过循环按钮或方法切换) |
| muted | Boolean | false | 是否静音 |
| initialTime | Number | 0 | 初始播放位置(秒) |
| durationHint | Number | 0 | 时长提示(秒),用于在元数据加载前显示总时长 |
| objectFit | String | contain | 视频填充模式:contain / fill / cover |
| height | String | '' | 播放器高度,如 420rpx。为空时按 aspectRatio 自适应高度(宽屏适配) |
| aspectRatio | String | 16:9 | 宽高比,height 为空时生效,如 16:9 / 4:3 / 21:9 |
| rounded | Boolean | false | 是否显示圆角 |
| backgroundColor | String | #000000 | 播放器背景色(视频未铺满时的留白区域,如宽高比不一致的黑边) |
| themeColor | String | #3b7cff | 主题色(进度条、当前菜单项) |
| showBack | Boolean | false | 是否显示返回按钮(触发 back 事件) |
| showFullscreenBtn | Boolean | true | 是否显示全屏按钮 |
| showSpeedBtn | Boolean | true | 是否显示倍速按钮 |
| showQualityBtn | Boolean | true | 是否显示清晰度按钮(需同时传入非空 sources 才显示) |
| showVolumeBtn | Boolean | true | 是否显示音量按钮 |
| showLoopBtn | Boolean | true | 是否显示循环播放按钮 |
| volume | Number | 1 | 初始音量,0~1(滑到 0 时静音) |
| speedOptions | Array | [0.5,0.75,1,1.25,1.5,2,2.5,3] | 可选倍速列表 |
| sources | Array | [] | 清晰度列表,元素形如 { label, src },为空时不显示清晰度按钮 |
| enableGesture | Boolean | true | 是否启用手势 |
| enableLongPress | Boolean | true | 是否启用长按倍速 |
| enableDoubleTap | Boolean | true | 是否启用双击快进/快退 |
| enableSeek | Boolean | true | 是否启用滑动/双击调节进度 |
| enableVolume | Boolean | true | 是否启用滑动调节音量 |
| enableBrightness | Boolean | true | 是否启用滑动调节亮度 |
| longPressRate | Number | 3 | 长按时的倍速 |
| longPressDuration | Number | 300 | 长按判定时长(毫秒) |
| seekStep | Number | 10 | 双击快进/快退步长(秒) |
| autoHideDelay | Number | 4000 | 播放时控制栏自动隐藏延时(毫秒)。操作中(打开菜单、拖拽进度条)不会自动隐藏;设为 0 表示从不自动隐藏 |
| enableWheel | Boolean | true | 桌面端(Web)是否启用鼠标滚轮调节:默认调节音量,按住 Ctrl / Alt 时调节亮度 |
| enableKeyboard | Boolean | true | 桌面端(Web)是否启用键盘快捷键:空格播放/暂停、←→ 快退/快进、↑↓ 音量、Esc 退出全屏 |
事件 Events
| 事件名 | 回调参数 | 说明 |
|---|---|---|
| play | - | 开始播放 |
| pause | - | 暂停播放 |
| ended | - | 播放结束 |
| timeupdate | { currentTime, duration } |
播放进度变化 |
| progress | { buffered } |
缓冲进度变化 |
| waiting | - | 缓冲等待 |
| loadedmetadata | { duration } |
元数据加载完成 |
| seek | { currentTime, duration } |
进度跳转(拖拽/滑动/双击) |
| ratechange | { rate } |
倍速变化 |
| volumechange | { volume } |
音量变化 |
| brightnesschange | { brightness } |
亮度变化 |
| qualitychange | { index, item } |
清晰度切换 |
| loopchange | { loop } |
循环播放开关变化 |
| fullscreenchange | { fullScreen, direction } |
全屏状态变化 |
| longpressstart | { rate } |
进入长按倍速 |
| longpressend | { rate } |
退出长按倍速 |
| back | - | 点击返回按钮 |
| retry | - | 点击错误重试 |
| error | { errMsg } |
播放出错 |
交互说明
- 单击:显示 / 隐藏控制层(若已打开菜单则关闭菜单)
- 双击左半屏:快退
seekStep秒 - 双击右半屏:快进
seekStep秒 - 长按:进入
longPressRate倍速播放,松手恢复 - 左右滑动:调节播放进度,松手生效
- 左半屏上下滑动:调节亮度
- 右半屏上下滑动:调节音量
- 进度条:点击或拖动可直接跳转进度(Web 端支持鼠标)
电脑鼠标操作(Web)
Web 平台支持鼠标操作:按下左键后拖动可触发滑动类手势(进度 / 亮度 / 音量),双击快进/快退、单击切换控制层均可用;进度条可直接用鼠标点击或拖动。未按下左键时的鼠标移动不会触发任何手势。
此外,Web 桌面端还支持:鼠标滚轮调节音量(按住 Ctrl / Alt 时调节亮度);键盘快捷键——空格播放/暂停、← / → 快退/快进、↑ / ↓ 调音量、Esc 退出全屏。键盘快捷键需先点击一次视频使其获得焦点后生效,可通过 enableWheel、enableKeyboard 关闭。
平台支持与差异
| 能力 | App | Web | 微信小程序 |
|---|---|---|---|
| 播放控制 / 进度 / 倍速 | √ | √ | √ |
| 自定义控制层覆盖 | √(同层渲染) | √ | √(同层渲染) |
| 滑动调进度 | √ | √ | √ |
| 双击快进/快退 | √ | √ | √ |
| 长按倍速 | √ | √ | √ |
| 亮度调节 | √(系统 API) | 遮罩模拟 | √(系统 API) |
| 音量调节 | 降级(静音开关) | 降级(静音开关) | 降级(静音开关) |
| 清晰度切换 | √ | √ | √ |
| 鼠标拖动 / 滚轮(桌面端) | - | √ | - |
| 键盘快捷键(桌面端) | - | √ | - |
| 全屏(控制层可操作) | √(CSS 全屏) | √(CSS 全屏) | √(原生全屏) |
说明:uni-app x 原生
video组件没有提供音量控制 API,因此音量滑动在各平台统一降级为静音开关(滑到 0 静音、非 0 恢复);Web 平台不支持系统亮度,使用黑色遮罩模拟明暗。
注意事项
- 组件直接使用原生
video组件并开启同层渲染,控制层 / 手势层覆盖在视频之上,请在页面中为播放器预留足够高度。 - 亮度调节在 App / 微信小程序调用系统屏幕亮度 API,组件销毁时会尽量恢复初始亮度;Web 使用黑色遮罩模拟,仅改变视觉明暗。
- App 端与 Web 端全屏通过 CSS 全屏实现(组件根节点固定定位铺满视口),可保证自定义控制层在全屏下依然可操作;微信小程序走原生
VideoContext.requestFullScreen/exitFullScreen。 - 清晰度切换会重新加载视频资源,组件会尽量保持当前播放进度与播放状态。
- 自动播放受各平台策略限制(如 Web 需要静音或用户交互后才可自动播放),请结合
muted使用。 - 倍速 / 清晰度菜单选项较多时,菜单内部可上下滑动;菜单最大高度受限,不会溢出播放器区域。

收藏人数:
购买普通授权版(
试用
赞赏(0)
下载 297
赞赏 1
下载 12671651
赞赏 1955
赞赏
京公网安备:11010802035340号