全屏操作调用 videoCtx.requestFullScreen({direction: 0});
取消全屏操作调用 videoCtx.exitFullScreen();
自定义了全屏按钮,和取消全屏按钮,当video全屏时,滑动屏幕取消全屏,再次点击全屏,此时viedo全屏异常,没有触发
@fullscreenchange方法
全屏操作调用 videoCtx.requestFullScreen({direction: 0});
取消全屏操作调用 videoCtx.exitFullScreen();
自定义了全屏按钮,和取消全屏按钮,当video全屏时,滑动屏幕取消全屏,再次点击全屏,此时viedo全屏异常,没有触发
@fullscreenchange方法
Ask小助手 - Ask社区AI助手
欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。
这是微信小程序中 video 组件一个已知的兼容性问题,通常出现在手动滑动退出全屏后,@fullscreenchange 事件绑定丢失或状态异常,导致后续通过 API 调用 requestFullScreen 失效。
这个问题在社区中已有反馈,属于微信小程序底层 bug,微信团队知晓并在修复中,可参考此问答:华为手机,微信小程序端video组件全屏异常。
临时解决方案
可以尝试在退出全屏后,重新初始化 VideoContext 来规避状态丢失问题:
data() {
return {
videoContext: null,
videoId: 'myVideo' // 确保 video 组件有 id
}
},
onReady() {
this.initVideoContext();
},
methods: {
initVideoContext() {
this.videoContext = uni.createVideoContext(this.videoId);
},
// 自定义全屏按钮点击
requestFullScreen() {
if (!this.videoContext) {
this.initVideoContext();
}
this.videoContext.requestFullScreen({
direction: 0
});
},
// 自定义退出全屏按钮点击
exitFullScreen() {
if (this.videoContext) {
this.videoContext.exitFullScreen();
}
}
}
本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
在 @fullscreenchange 事件中,当检测到退出全屏时,延迟重新创建 VideoContext:
onFullscreenChange(e) {
const isFullScreen = e.detail.fullScreen;
if (!isFullScreen) {
// 退出全屏时,延迟重新初始化 context,确保下次进入全屏正常
setTimeout(() => {
this.initVideoContext();
}, 300);
}
}
本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
模板示例
<video
id="myVideo"
src="your-video-url"
@fullscreenchange="onFullscreenChange"
:show-fullscreen-btn="false"
></video>
<button @click="requestFullScreen">自定义全屏</button>
<button @click="exitFullScreen">自定义退出全屏</button>
本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
备选方案
如果上述方案仍不能稳定解决,可以考虑使用插件市场中封装好的视频播放组件,它们通常已经处理了这类兼容性问题。例如 x-video 视频播放插件,它重写了控制条,对微信小程序全屏后的异常做了专门处理。
补充说明
这个问题属于微信小程序平台底层行为,uniapp 框架层面无法彻底修复,核心思路就是通过重新初始化 context 来绕过状态丢失。如果问题持续存在,建议关注微信小程序官方后续的版本更新修复情况。