uni-app中video全屏之后,原生子窗体不显示

发布于 1周前 作者 itying888 来自 Uni-App

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平台,全屏视频的处理机制会有所不同,可能需要采用不同的策略。

回到顶部