uni-app中video组件在iOS机型上无法根据视频比例自动判断全屏是横屏全屏还是竖屏全屏

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

uni-app中video组件在iOS机型上无法根据视频比例自动判断全屏是横屏全屏还是竖屏全屏

开发环境 版本号 项目创建方式

视频组件在iOS机型上无法根据视频比例自动判断全屏是横屏全屏还是竖屏全屏。但是在Android手机上是可以自动判断的。

1 回复

在uni-app中,video组件在iOS机型上确实可能无法根据视频比例自动判断全屏是横屏全屏还是竖屏全屏。这通常是因为iOS系统对视频全屏播放的控制较为严格,需要手动设置一些属性以及监听相关事件来实现预期的效果。

以下是一个示例代码,展示了如何在uni-app中通过监听video组件的fullscreenchange事件和设置direction属性来控制全屏播放的方向。请注意,由于uni-app的跨平台特性,部分iOS特定的实现可能需要借助原生插件或平台判断。

<template>
  <view class="container">
    <video
      id="myVideo"
      src="https://www.example.com/path/to/your/video.mp4"
      controls
      object-fit="contain"
      @fullscreenchange="onFullscreenChange"
      :direction="videoDirection"
    ></video>
  </view>
</template>

<script>
export default {
  data() {
    return {
      videoDirection: 0, // 0: 默认方向, 90: 顺时针旋转90度, -90: 逆时针旋转90度
    };
  },
  methods: {
    onFullscreenChange(event) {
      const videoElement = document.getElementById('myVideo');
      if (videoElement.webkitDisplayingFullscreen) {
        // 判断视频是否在全屏模式下
        const videoWidth = videoElement.videoWidth;
        const videoHeight = videoElement.videoHeight;
        const screenWidth = window.screen.width;
        const screenHeight = window.screen.height;

        if (videoWidth / videoHeight > screenWidth / screenHeight) {
          // 视频宽高比大于屏幕宽高比,应该横屏全屏
          this.videoDirection = 90; // 或者通过其他方式触发横屏全屏
        } else {
          // 视频宽高比小于或等于屏幕宽高比,应该竖屏全屏
          this.videoDirection = 0; // 或者通过其他方式触发竖屏全屏
        }
      } else {
        // 退出全屏时重置方向
        this.videoDirection = 0;
      }
    },
  },
};
</script>

<style>
.container {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
  background-color: #000;
}
video {
  width: 100%;
  max-width: 600px; /* 可根据需要调整 */
}
</style>

注意

  1. direction属性在uni-app的video组件中可能并不直接支持,这里仅作为示例。在iOS上,全屏方向的控制通常依赖于系统层面的设置,可能需要通过原生插件或原生代码来实现。
  2. 上述代码中的webkitDisplayingFullscreen是WebKit特有的属性,用于检测视频是否处于全屏状态。在非WebKit浏览器(如Android上的Chrome)上,可能需要使用其他属性或方法。
  3. 由于uni-app的跨平台特性,对于iOS特定的实现,建议查阅uni-app官方文档或社区,了解是否有更简便或官方推荐的方法。
回到顶部