uni-app video controls在ipad设备上失效问题 处理请求 点击视频区域不显示控制条

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

uni-app video controls在ipad设备上失效问题 处理请求 点击视频区域不显示控制条

示例代码:

<video :src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/2minute-demo.mp4" :autoplay="true" :initial-time="0" controls></video>

操作步骤:

  • 视频开始播放后,在ipad上点击视频区域

预期结果:

  • 点击视频区域后,能够显示控制条,用户可以拖动进度条或者全屏

实际结果:

  • 点击视频区域后,无法显示控制条:进度条,全屏按钮等都没有

bug描述:

  • uniapp,video的controls功能在ipad设备上失效,点击视频区域不显示控制条,无法进行拖动进度条和全屏
信息类别 信息内容
产品分类 uniapp/App
PC开发环境 Windows
PC开发环境版本 Windows10
HBuilderX类型 正式
HBuilderX版本 4.15
手机系统 iOS
手机系统版本 iOS 16
手机厂商 苹果
手机机型 Ipad(第八代)
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

2 回复

楼主解决了吗?我在iOS真机上也遇到不显示controls


在处理uni-app中video组件在iPad设备上点击视频区域不显示控制条的问题时,通常这是由于iOS设备的默认行为或者uni-app的某些限制导致的。我们可以通过一些技巧来强制显示控制条。以下是一个可能的解决方案,通过监听触摸事件来手动显示控制条。

首先,确保你的video组件已经正确设置,包括controls属性:

<template>
  <view class="container">
    <video
      id="myVideo"
      src="your-video-url.mp4"
      controls
      @touchstart="onTouchStart"
      @touchend="onTouchEnd"
    ></video>
  </view>
</template>

接下来,在脚本部分,我们可以添加触摸事件监听器,尝试在触摸结束时手动触发显示控制条。由于uni-app没有直接提供显示控制条的API,我们需要借助原生DOM操作(如果可能的话)或者通过一些间接方式来尝试触发显示。以下是一个尝试通过模拟用户点击视频区域来显示控制条的示例:

<script>
export default {
  methods: {
    onTouchStart(event) {
      // 可以记录触摸开始的位置,用于后续判断是否需要处理
    },
    onTouchEnd(event) {
      // 尝试在触摸结束时触发点击事件以显示控制条
      const videoElement = this.$refs.videoRef || document.getElementById('myVideo');
      if (videoElement) {
        // 创建一个新的点击事件
        const clickEvent = new MouseEvent('click', {
          view: window,
          bubbles: true,
          cancelable: true
        });
        // 触发点击事件
        videoElement.dispatchEvent(clickEvent);

        // 如果上述方法无效,可以尝试模拟用户触摸屏幕的其他位置再返回视频区域
        // 这里提供一个基本的思路,但不保证在所有情况下都有效
        // 例如,可以模拟一个短暂的触摸屏幕底部然后快速回到视频区域的动作
      }
    }
  },
  mounted() {
    // 如果使用ref获取DOM元素,确保ref已经正确设置
    // this.$refs.videoRef = document.getElementById('myVideo'); // 实际上不需要这行,因为上面已经直接获取了
  }
};
</script>

注意:上述代码中的document.getElementByIdMouseEvent可能并不直接适用于uni-app,因为uni-app主要运行在小程序等环境中,这些环境可能不支持完整的DOM API。如果运行在H5环境中,上述代码可能有效。对于小程序环境,可能需要使用小程序提供的API来实现类似的功能,比如使用createSelectorQuery来获取节点信息,并通过小程序的事件系统来模拟用户交互。

由于uni-app跨平台的特性,处理这类问题时需要考虑目标平台的限制和差异。如果上述方法在你的具体环境中无效,可能需要进一步探索uni-app社区或者官方文档,看看是否有相关的更新或者推荐的做法。

回到顶部