js解决video遮挡问题

由于现在微信内置浏览器采用腾讯X5内核,X5内核以增强用户体验为名,给video套上了自己的UI并强制全屏与置顶,这个全屏与层级不接受DOM层面的任何约束。

第一种情况如图

安卓的效果

 视频会遮挡侧边栏。

思路:点击视频播放的时候,打开新的页面播放视频,此页面视频重新加载即可。

由于此页面数量不定,是从后台接口返回的src,自动渲染的。所以要循环出视频,然后获取这个视频的元素还要使用定时器才能获取到。(如果视频是本来页面就存在,那么不需要定时器。)

最后,由于ios不存在这个问题,所以一开始可以判断是否是ios。

 mounted() {
   var userAgent = navigator.userAgent;
    var isiOS = !!userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
      if(!isiOS){
       setTimeout(function(){
            const videos = document.getElementsByTagName('video');
          for(var i=0;i<videos.length;i++){
            const url=videos[i].firstElementChild.src
          videos[i].addEventListener('playing',function(){
            window.open(url);
            this.load();
            }
            )
          }
    },500);
    }
  },

第二种情况如图

 如果在当前页面播放,点击上面的导航栏按钮,那么也会遮挡。

思路:在video标签的同级添加一个div,能覆盖住这个video,也就是点击这个div可以直接在新页面播放视频,此页面不播放。

代码:
 

 <div class="mask" @click.stop="videoClick" v-show="maskShow">
      </div>
      <video
        controls
        :src="systemConfig.trainningCenterApi + videoInfo.url"
        webkit-playsinline="true"
        playsinline="true" 
        :poster="systemConfig.trainningCenterApi + videoInfo.img_url"
        id="video"
      ></video>
  .mask{
    position: absolute;
    top:0;
    width: 100%;
    height: 100%;
    z-index: 99;
  }
    isIos(){
 var userAgent = navigator.userAgent;
      var isiOS = !!userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
  //  alert(isiOS);
   if(!isiOS){
    this.maskShow=true
    }
    else{
      this.maskShow=false
    }
  },
    videoClick() {
     var elevideo = document.getElementById("video");
      window.open(elevideo.src)
    },
 mounted() {
    this.isIos();
  },
  data() {
    return {
      maskShow:false
    };
  },

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
uniApp Video组件遮挡悬浮按钮的功能允许用户在播放视频时不阻碍关键操作,比如播放、暂停、快进等。这是通过在视频元素上添加一个透明度较高的覆盖层,并在这个覆盖层上设计并显示需要的交互控件(如播放/暂停按钮、时间进度条等)来实现的。 ### 实现步骤: 1. **引入Video组件**:首先,在您的uni-app页面中引入`<video>`标签作为视频播放器的基础组件。 2. **自定义样式**:为了覆盖整个视频区域,可以给`<video>`元素设置一个背景颜色或透明度较低的背景图片,使其看起来像是一个遮罩层,然后在此基础上添加需要的UI控件。 3. **添加UI组件**:将播放控制按钮、时间滑块等常用控件放置于`<video>`元素之上。通常,这些控件会使用`absolute`定位策略,以确保它们总是处于视频元素的顶部。 4. **交互事件绑定**:通过监听`<video>`组件的事件(例如`touchstart`、`touchend`等),可以实现按钮响应和视频的交互控制功能,比如播放/暂停、前进、倒退等。 5. **动态更新UI状态**:当视频的状态发生变化(例如开始播放、暂停、结束等)时,及时调整UI控件的状态,以保持用户的良好体验。 ### 示例代码段: ```html <view class="video-container"> <video src="/path/to/video.mp4" controls="controls" autoplay loop muted> 您的浏览器不支持 HTML5 视频。 </video> <!-- 自定义遮挡层 --> <cover-view class="control-layer" @tap.stop="handleTap"> <!-- 播放/暂停按钮 --> <image mode="aspectFill" src="/images/play-pause.png" class="play-button"></image> <!-- 进度条 --> <slider range="#00a67c" thumb="#fff" bindchange="handleChange" class="progress-bar"></slider> </cover-view> </view> ``` ### 相关问题: 1. **如何优化视频加载速度?** - 使用合适的编码格式和分辨率预设来减少文件大小。 - 利用CDN加速内容分发网络,缩短视频资源加载延迟。 - 分段上传视频,利用流媒体技术提供流畅播放体验。 2. **如何提高用户体验?** - 确保所有交互控件布局合理,便于点击和触摸操作。 - 考虑不同设备的屏幕尺寸和输入模式进行适配。 - 添加错误提示信息,指导用户解决可能出现的问题。 3. **视频组件的兼容性如何处理?** - 验证不同平台(iOS、Android)上的视频渲染效果一致性和稳定性。 - 对于特定的浏览器版本或其他特殊情况下的兼容性问题,采用相应的polyfill或方案进行修复。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值