uni-app ipad旋转后视频进入全屏异常

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

uni-app ipad旋转后视频进入全屏异常

操作步骤:

  • 在ipad上四个方向旋转之后视频全屏

预期结果:

  • 在ipad上四个方向全屏的时候旋转都不要180度

实际结果:

  • 在反向横屏的方向旋转异常

bug描述:

  • 在nuve页面上ipad旋转方向之后视频全屏异常

| 开发环境 | 版本号 | 项目创建方式 |
|---------|-------|--------------|
| Mac     | 14.2  | HBuilderX    |
| iOS     | iOS 14|              |
|         |       |              |
|         |       |              |

2 回复

离线打包 需要你在xcode里勾选所有ipad orientation


在 uni-app 中,iPad 旋转后视频进入全屏时出现异常,可能是由于以下原因导致的:

1. CSS 样式问题

  • 原因: 在 iPad 旋转时,视频元素的 CSS 样式可能没有正确适配新的屏幕尺寸,导致全屏显示异常。
  • 解决方案: 确保视频元素的 CSS 样式能够自适应屏幕尺寸。可以使用 vwvh 等相对单位来设置视频的宽度和高度,或者使用 flex 布局来确保视频元素能够自动调整大小。
video {
  width: 100%;
  height: 100%;
  object-fit: cover; /* 保持视频比例 */
}

2. 全屏 API 调用问题

  • 原因: 在 iPad 旋转时,可能需要重新调用全屏 API 来确保视频正确进入全屏模式。
  • 解决方案: 在屏幕旋转事件中,重新调用全屏 API。可以使用 window.onresize 事件来监听屏幕旋转,并在旋转后重新进入全屏模式。
window.onresize = function() {
  if (window.orientation !== undefined) {
    // 重新进入全屏模式
    videoElement.requestFullscreen();
  }
};

3. uni-app 生命周期问题

  • 原因: 在 uni-app 中,页面生命周期可能没有正确处理屏幕旋转事件,导致视频全屏显示异常。
  • 解决方案: 在 onPageScrollonResize 等生命周期函数中,处理屏幕旋转事件,并重新调整视频的显示状态。
onPageScroll() {
  if (window.orientation !== undefined) {
    // 处理屏幕旋转后的逻辑
    videoElement.requestFullscreen();
  }
}

4. 浏览器兼容性问题

  • 原因: 不同浏览器对全屏 API 的支持可能存在差异,特别是在 iPad 上。
  • 解决方案: 使用兼容性更好的全屏 API,或者使用第三方库(如 screenfull.js)来处理全屏操作。
import screenfull from 'screenfull';

if (screenfull.isEnabled) {
  screenfull.request(videoElement);
}

5. uni-app 插件或组件问题

  • 原因: 如果使用了 uni-app 的插件或组件来播放视频,可能存在兼容性问题。
  • 解决方案: 检查插件或组件的文档,确保其支持 iPad 旋转后的全屏显示。如果问题依然存在,可以考虑使用原生 HTML5 的 <video> 标签来播放视频。

6. iOS Safari 的特定问题

  • 原因: iOS Safari 对全屏模式的处理可能与其他浏览器不同,特别是在 iPad 上。
  • 解决方案: 确保在 iOS Safari 上使用 playsinline 属性来防止视频自动进入全屏模式,并在需要时手动调用全屏 API。
<video playsinline webkit-playsinline></video>

7. 调试和日志

  • 原因: 如果以上方法都无法解决问题,可能需要进一步调试。
  • 解决方案: 在代码中添加日志,检查在屏幕旋转时视频的状态和全屏 API 的调用情况,以便更好地定位问题。
console.log('Screen rotated, video state:', videoElement);
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!