uni-app中video全屏之后,原生子窗体不显示
uni-app中video全屏之后,原生子窗体不显示
问题描述
video全屏之后,原生子窗体不显示,不全屏的时候是正常的。
"subNVues": [{
"path": "pages/index/subNvue",
"id": "subNvue",
"style": {
"width": "100%",
"height": "50rpx",
"position": "absolute",
"top": "142rpx",
"margin": "auto"
}
}]
日期
2024-10-08 11:36
1 回复
在uni-app中处理video组件全屏后原生子窗体不显示的问题,通常涉及到对全屏事件的处理以及对原生组件的重新渲染。由于uni-app主要运行在H5、小程序、App等多个平台上,解决方案可能会有所不同,但基本思路是监听全屏事件并相应地调整界面布局。
以下是一个基于Vue和uni-app框架的示例代码,展示如何在App平台上处理video全屏事件,并确保原生子窗体在全屏视频播放后能够正确显示。注意,这里主要关注App平台,因为H5和小程序对全屏视频的处理机制有所不同。
<template>
<view>
<video
id="myVideo"
src="path/to/your/video.mp4"
controls
@fullscreenchange="handleFullscreenChange"
></video>
<view v-if="!isFullscreen">
<!-- 原生子窗体内容 -->
<native-component :style="{ display: nativeComponentVisible ? 'block' : 'none' }">
<!-- 这里放置你的原生组件 -->
</native-component>
</view>
</view>
</template>
<script>
export default {
data() {
return {
isFullscreen: false,
nativeComponentVisible: true,
};
},
methods: {
handleFullscreenChange() {
const video = uni.createSelectorQuery().select('#myVideo');
video.boundingClientRect(data => {
// 判断是否全屏,这里简单通过视频元素的高度变化来检测
this.isFullscreen = data.height === window.innerHeight;
// 根据全屏状态调整原生组件的显示
this.nativeComponentVisible = !this.isFullscreen;
}).exec();
},
},
onReady() {
// 初始化时检测全屏状态(主要针对某些平台可能直接进入全屏的情况)
this.handleFullscreenChange();
},
};
</script>
<style>
/* 样式可以根据需要调整 */
</style>
在这个示例中,我们使用了@fullscreenchange
事件监听video的全屏状态变化。当视频进入全屏时,handleFullscreenChange
方法会被触发,通过uni.createSelectorQuery
获取video元素的高度,并与窗口高度比较来判断是否全屏。根据全屏状态,我们调整nativeComponentVisible
的值来控制原生子窗体的显示与隐藏。
请注意,由于不同平台对全屏事件的支持和表现可能有所不同,上述代码可能需要针对特定平台进行适配。此外,对于小程序和H5平台,全屏视频的处理机制会有所不同,可能需要采用不同的策略。