uniapp 视频小窗切换如何实现
在uniapp中如何实现视频小窗切换功能?当从全屏播放切换到小窗模式时,视频需要继续播放且位置固定,类似悬浮窗效果。目前尝试过使用cover-view和调整样式,但小窗位置会随页面滚动而移动。请问有没有成熟的解决方案或组件推荐?最好能兼容H5和APP端。
2 回复
在uniapp中,实现视频小窗切换可使用<video>组件的picture-in-picture模式。设置picture-in-picture-mode属性为['push', 'pop'],通过@pipmodechange监听切换事件。也可用uni.createVideoContext控制播放器,结合CSS定位实现自定义小窗。
在 UniApp 中实现视频小窗切换(画中画模式),可以通过以下步骤实现:
核心思路
使用 uni.createVideoContext 控制视频播放器,结合 CSS 样式动态调整视频窗口位置和大小。
实现步骤
-
创建视频组件
在页面中添加<video>组件,并设置 id。<video id="myVideo" src="https://example.com/sample.mp4" controls :style="videoStyle" ></video> -
控制视频状态
使用uni.createVideoContext获取视频实例,控制播放/暂停。export default { data() { return { videoContext: null, isMiniWindow: false, // 是否小窗模式 videoStyle: { width: '100%', height: '400rpx', position: 'fixed', bottom: '0', right: '0', zIndex: 999 } } }, onReady() { this.videoContext = uni.createVideoContext('myVideo') }, methods: { // 切换小窗/全屏 toggleMiniWindow() { this.isMiniWindow = !this.isMiniWindow if (this.isMiniWindow) { // 小窗样式 this.videoStyle = { width: '200rpx', height: '150rpx', position: 'fixed', bottom: '100rpx', right: '20rpx', zIndex: 999 } } else { // 全屏样式 this.videoStyle = { width: '100%', height: '400rpx' } } }, // 播放视频 playVideo() { this.videoContext.play() } } } -
添加切换按钮
在页面放置切换按钮:<button [@click](/user/click)="toggleMiniWindow">切换小窗</button> <button [@click](/user/click)="playVideo">播放</button>
注意事项
- 平台差异:H5 和 App 端支持较好,小程序端可能受平台限制(如微信小程序需特定配置)。
- 层级管理:小窗模式下注意
z-index设置,避免被其他元素遮挡。 - 手势操作:可添加拖拽功能(需通过 touch 事件计算位置)。
扩展建议
如需更复杂功能(如拖拽移动),可结合 @touchstart、@touchmove 事件动态计算视频位置。
以上方案通过样式切换实现基础小窗效果,代码简洁且跨平台兼容性较好。

