Jessibuca 播放器底部控制栏完全指南:5个开关自定义按钮与自动隐藏
【免费下载链接】jessibucaJessibuca 是一款开源的纯H5直播流播放器,通过Emscripten将音视频解码库编译成Js(wasm)运行于浏览器之中。兼容几乎所有浏览器,可以运行在PC、手机、微信中,无需额外安装插件。项目地址: https://gitcode.com/langhuihui/jessibuca
Jessibuca 是一款开源的纯 H5 直播流播放器,通过 WebAssembly 在浏览器中完成音视频解码,无需安装任何插件。它内置了一套底部 UI 原子化配置机制:每一个按钮(播放、音量、截图、录制、全屏)都可以单独开关,底部控制栏还能设置自动隐藏。本文带你快速掌握 Jessibuca 播放器按钮自定义与控制栏自动隐藏的全部玩法。
一、为什么需要原子化按钮配置?
默认情况下,Jessibuca 为了保持画面纯净,所有控制按钮都是关闭的(默认选项见 src/constant/index.js)。但在不同业务场景下,你往往只需要其中一部分功能:
- 📺 网页点播页:需要播放/暂停、音量、截图、全屏
- 🎥 录像回看页:可能需要录制按钮
- 📱 移动端信息流:只想要音量与全屏,其余都不要
Jessibuca 通过operateBtns配置项,把每个按钮作为独立"原子"暴露出来,想开哪个开哪个,互不干扰。
二、operateBtns:一键配置播放器按钮
operateBtns下有 5 个开关,全部为布尔值(类型定义见 jessibuca.d.ts):
| 配置项 | 对应按钮 | 常见用途 |
|---|---|---|
play | 播放 / 暂停(含画面中央大播放键) | 点播场景必备 |
audio | 音量调节 + 静音 | 默认建议开启 |
screenshot | 截图下载 | 直播抓帧、取证 |
record | 网页录制 / 停止录制 | 录制为 webm/mp4 |
fullscreen | 进入 / 退出全屏 | 大屏观看 |
按钮的渲染逻辑集中在 src/control/template.js:每一项为true时,对应 DOM 才会被插入到.jessibuca-controls底部容器中,因此"少一个开关就少一个按钮",非常直观。
一个典型的点播页配置
const player = new Jessibuca({ container: document.getElementById('jplayer'), videoBuffer: 1000, operateBtns: { audio: true, // 音量 play: true, // 播放/暂停 screenshot: true, // 截图 fullscreen: true, // 全屏 record: false // 关闭录制 }, controlAutoHide: false });几个容易忽略的细节
- 🧩控制栏是否出现是自动计算的:
showBandwidth、text或任意一个按钮开启时,hasControl才会为true(见 _hasControl()),不用手动指定。 - 🔇纯视频流会自动隐藏音量按钮:当
hasAudio: false时,operateBtns.audio会被强制置为false(src/player/index.js),避免用户点一个没用的按钮。 - 📱移动端强制关闭自动隐藏:手机上手指没有"悬停"概念,自动隐藏体验很差,因此移动端会直接将
controlAutoHide设为false(src/player/index.js)。
三、controlAutoHide:控制栏自动隐藏配置
controlAutoHide控制底部控制栏是否自动隐藏(默认false,常显)。设为true后,交互规则如下(实现见 src/control/events.js):
- 鼠标移入播放器区域 → 控制栏立即显示;
- 鼠标在区域内移动→ 刷新计时,保持显示;
- 5 秒内无操作→ 控制栏自动隐藏;
- 鼠标移出播放器区域 → 立即隐藏。
对应代码 src/control/events.js#L164-L170 中的 5 秒延时计时器:
delayHiddenTimeout = setTimeout(() => { setStyle(control.$controls, 'display', 'none'); }, 5 * 1000)何时该开自动隐藏?
- ✅长时间值守的监控墙:控制栏 5 秒后消失,画面占比更大;
- ✅全屏播放:减少 UI 干扰,接近原生视频体验;
- ❌操作频繁的工具型页面:建议保持常显,减少"找不到按钮"的困扰。
四、运行时查询与控制栏状态
除了配置项,Jessibuca 还提供了运行时方法查看控制栏状态,方便你在自定义 UI 中做联动(实现见 src/player/index.js):
isControlBarShow():当前是否应当常显控制栏(hasControl && !controlAutoHide且实际可见);getControlBarShow():控制栏 DOM 此刻的实际显示状态。
配合 src/control/index.js 中的toggleBar(flag)/getBarIsShow(),你可以在自己的业务层做到:视频暂停时强制显示控制栏、恢复播放后让它重新进入自动隐藏逻辑。
五、完整按钮布局速查
底部控制栏的 DOM 结构由 src/control/template.js 生成,布局如下:
- 左侧
jessibuca-controls-left:码率显示(showBandwidth: true时出现); - 右侧
jessibuca-controls-right:音量 → 播放/暂停 → 截图 → 录制 → 全屏,按配置顺序渲染; - 另有三个独立浮层:加载动画(
jessibuca-loading)、背景图(jessibuca-poster,由background配置)、录制中状态条(jessibuca-recording,带红色圆点与计时)。
样式细节可参考 src/control/style.less,图标定义在 src/control/icons.js。
六、常见问题 FAQ
Q1:设置了按钮却没看到控制栏?检查是否至少开启了一个按钮或showBandwidth——hasControl是自动推导的,全部按钮关闭时控制栏根本不会渲染。
Q2:为什么移动端自动隐藏不生效?这是预期行为:移动端会强制controlAutoHide = false,保证用户可以随时触达按钮。
Q3:自动隐藏的 5 秒可以改吗?当前 5 秒是源码内置值(src/control/events.js#L167-L119),如需自定义时长,可按项目规范基于该文件做二次开发。
Q4:如何在微信中正常显示?Jessibuca 兼容微信内置浏览器,控制栏配置逻辑与 PC 端一致;注意微信中自动播放受限制,建议搭配play按钮 + 中央大播放键使用。
写在最后
通过operateBtns与controlAutoHide两个配置项,Jessibuca 把播放器底部 UI 拆成了可自由组合的原子:从只保留音量的极简监控墙,到按钮齐全的全功能点播页,都可以在几行配置内完成。结合本文涉及的 src/control/ 模块源码,你还可以进一步定制按钮图标、间距与隐藏策略,打造完全符合产品风格的播放器界面。
【免费下载链接】jessibucaJessibuca 是一款开源的纯H5直播流播放器,通过Emscripten将音视频解码库编译成Js(wasm)运行于浏览器之中。兼容几乎所有浏览器,可以运行在PC、手机、微信中,无需额外安装插件。项目地址: https://gitcode.com/langhuihui/jessibuca
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考