欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。
在 uni-app 打包的 App 端(安卓、iOS),<video> 组件属于原生组件。当调用原生全屏时,视频会脱离 webview 渲染层进入系统级别的全屏状态。在这种状态下,前端页面中的 cover-view、cover-image 或其他普通组件无法覆盖在原生视频之上,因此无法通过监听前端触摸事件来实现自定义的快进、倒退手势。
针对你使用 Vue3 开发且需要支持全屏横屏下快进、倒退的需求,可以参考以下两种解决方案:
方案一:使用 CSS 伪全屏与自定义控制层
不使用 <video> 组件的 requestFullScreen 方法,而是通过 CSS 样式模拟全屏效果,使视频仍然保持在 webview 渲染层内。
- 锁定屏幕方向:在进入全屏时,调用
plus.screen.lockOrientation('landscape-primary') 锁定横屏;退出时调用 plus.screen.unlockOrientation() 解除锁定。
- CSS 旋转撑满屏幕:通过 CSS
transform: rotate(90deg) 将视频容器旋转,并设置宽高为屏幕的宽高,使其视觉上呈现横屏全屏效果。
- 覆盖自定义控制层:在视频上方覆盖
cover-view(vue 页面)或普通 view(nvue 页面),通过监听 @touchstart、@touchmove、@touchend 等触摸事件,计算手指滑动距离,从而调用 VideoContext.seek 方法实现快进和倒退,也可以实现长按倍速播放等功能。
方案二:使用插件市场现成插件
如果自行实现成本较高,建议前往 DCloud 插件市场寻找已经实现该功能的视频播放器插件。
例如 f-video 插件,它支持 Vue3、安卓和 iOS 平台,并且明确说明“全屏采用 css 加横屏方式显示”。这意味着该插件没有使用原生全屏,而是通过 CSS 方式实现全屏,从而可以方便地在视频上方覆盖自定义的控制层来实现快进、倒退等手势交互。
你也可以直接在 插件市场 搜索“视频播放器”,查找更多符合项目需求且支持自定义手势的播放器组件。
1 个回复
Ask小助手 - Ask社区AI助手
在 uni-app 打包的 App 端(安卓、iOS),
<video>组件属于原生组件。当调用原生全屏时,视频会脱离 webview 渲染层进入系统级别的全屏状态。在这种状态下,前端页面中的cover-view、cover-image或其他普通组件无法覆盖在原生视频之上,因此无法通过监听前端触摸事件来实现自定义的快进、倒退手势。针对你使用 Vue3 开发且需要支持全屏横屏下快进、倒退的需求,可以参考以下两种解决方案:
方案一:使用 CSS 伪全屏与自定义控制层
不使用
<video>组件的requestFullScreen方法,而是通过 CSS 样式模拟全屏效果,使视频仍然保持在 webview 渲染层内。plus.screen.lockOrientation('landscape-primary')锁定横屏;退出时调用plus.screen.unlockOrientation()解除锁定。transform: rotate(90deg)将视频容器旋转,并设置宽高为屏幕的宽高,使其视觉上呈现横屏全屏效果。cover-view(vue 页面)或普通view(nvue 页面),通过监听@touchstart、@touchmove、@touchend等触摸事件,计算手指滑动距离,从而调用VideoContext.seek方法实现快进和倒退,也可以实现长按倍速播放等功能。方案二:使用插件市场现成插件
如果自行实现成本较高,建议前往 DCloud 插件市场寻找已经实现该功能的视频播放器插件。
例如 f-video 插件,它支持 Vue3、安卓和 iOS 平台,并且明确说明“全屏采用 css 加横屏方式显示”。这意味着该插件没有使用原生全屏,而是通过 CSS 方式实现全屏,从而可以方便地在视频上方覆盖自定义的控制层来实现快进、倒退等手势交互。
你也可以直接在 插件市场 搜索“视频播放器”,查找更多符合项目需求且支持自定义手势的播放器组件。
要回复问题请先登录或注册
公告
更多>相关问题