uni-app 鸿蒙next video组件无法全屏

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

uni-app 鸿蒙next video组件无法全屏

操作步骤:

  • 全屏

预期结果:

  • 隐藏状态栏和导航栏并自动横屏显示

实际结果:

  • 如图

bug描述:

  • video自带组件全屏按钮点击后不全屏

image

信息类别 详细信息
产品分类 uniapp/App
PC开发环境 Windows
PC系统版本 win11
HBuilderX 正式
HBuilderX版本 4.29
手机系统 HarmonyOS NEXT
手机系统版本 HarmonyOS NEXT Developer Preview
手机厂商 华为
手机机型 mate60
页面类型 nvue
vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

更多关于uni-app 鸿蒙next video组件无法全屏的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 鸿蒙next video组件无法全屏的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对您提到的uni-app在鸿蒙next平台上video组件无法全屏的问题,这里提供一个可能的解决方案,主要通过自定义全屏按钮和逻辑控制来实现全屏效果。请注意,由于具体平台和环境可能有所不同,以下代码需要根据实际情况进行调整。

首先,确保您的uni-app项目已经正确配置了鸿蒙next平台的支持。

1. 页面布局

在页面的.vue文件中,定义一个video组件和一个全屏按钮:

<template>
  <view class="container">
    <video
      id="videoPlayer"
      src="your-video-url.mp4"
      controls
      @play="onPlay"
      @pause="onPause"
      :style="{ width: isFullScreen ? '100vw' : '300px', height: isFullScreen ? '100vh' : '200px' }"
    ></video>
    <button @click="toggleFullScreen">
      {{ isFullScreen ? '退出全屏' : '全屏' }}
    </button>
  </view>
</template>

2. 逻辑控制

在页面的<script>部分,定义全屏控制逻辑:

<script>
export default {
  data() {
    return {
      isFullScreen: false,
    };
  },
  methods: {
    toggleFullScreen() {
      this.isFullScreen = !this.isFullScreen;
      const videoPlayer = uni.createSelectorQuery().select('#videoPlayer');
      if (this.isFullScreen) {
        videoPlayer.boundingClientRect(rect => {
          // 保存原始尺寸,以便退出全屏时恢复
          this.originalSize = { width: rect.width, height: rect.height };
          // 设置全屏样式
          this.$forceUpdate(); // 强制更新视图
        }).exec();
      } else {
        // 恢复原始尺寸
        this.$set(this, 'isFullScreen', false);
        setTimeout(() => {
          const videoElement = document.getElementById('videoPlayer');
          videoElement.style.width = `${this.originalSize.width}px`;
          videoElement.style.height = `${this.originalSize.height}px`;
        }, 300); // 延迟执行,确保样式更新
      }
    },
    onPlay() {
      console.log('Video is playing');
    },
    onPause() {
      console.log('Video is paused');
    },
  },
};
</script>

3. 样式调整

在页面的<style>部分,根据需要调整样式:

<style scoped>
.container {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}
button {
  margin-top: 10px;
}
</style>

以上代码通过监听全屏按钮的点击事件,动态调整video组件的尺寸来实现全屏效果。由于鸿蒙next平台可能存在一些特定的限制或API差异,如果上述方法无法达到预期效果,建议查阅鸿蒙next平台的官方文档或社区资源,以获取更具体的解决方案。

回到顶部