移动端如何解决video层级最高的问题

在多次调试video的过程中发现了 一些小的优化方案和技巧。
通常我们使用video标签的时候,video因为是系统原生组件层级最高,导致我们无法将自己写的弹窗等盖在video标签上。
微信里可通过以下方案解决:腾讯用的基本都是x5内核,所以在腾讯系的app webview里使用该方法 都能解决层级问题。

<video ref="video" class="video-js vjs-default-skin vjs-big-play-centered" poster="https://qiniu-image.qtshe.com/20210315mp4-poster.png" controls x5-playsinline webkit-playsinline x5-video-player-type="h5" x5-video-player-fullscreen
      x5-video-orientation="portraint" playsinline>
        <source src="https://qiniu-image.qtshe.com/20210315normal%20video.mp4" />
    </video>

效果链接:https://m.qtshe.com/app/dunhuang

至于你想知道每个属性是干嘛的,可以参考:

controls:属性规定浏览器应该为视频提供播放控件。
autoplay="autoplay": 视频自动播放设置,但是有经验的人都应该知道,autoplay标签在手机上不兼容,APP中设置问题导致无法自动播放,无论安卓或IOS。需要模拟自动播放只能通过一些事件触发。
webkit-playsinline="true":视频播放时局域播放,不脱离文档流 。但是这个属性比较特别, 需要嵌入网页的APP比如WeChat中UIwebview 的allowsInlineMediaPlayback = YES webview.allowsInlineMediaPlayback = YES,才能生效。换句话说,如果APP不设置,你页面中加了这标签也无效,这也就是为什么安卓手机WeChat 播放视频总是全屏,因为APP不支持playsinline,而IOS的WeChat却支持。
这里就要补充下,如果是想做全屏直播或者全屏H5体验的用户,IOS需要设置删除 webkit-playsinline 标签,因为你设置 false 是不支持的 ,安卓则不需要,因为默认全屏。但这时候全屏是有播放控件的,无论你有没有设置control。 做直播的可能用得着播放控件,但是全屏H5是不需要的,那么去除全屏播放时候的控件,需要以下设置:同层播放。
x5-video-player-type="h5":启用同层H5播放器,就是在视频全屏的时候,div可以呈现在视频层上,也是WeChat安卓版特有的属性。同层播放别名也叫做沉浸式播放,播放的时候看似全屏,但是已经除去了control和微信的导航栏,只留下"X"和"<"两键。目前的同层播放器只在Android(包括微信)上生效,暂时不支持iOS。笔者想过为什么同层播放只对安卓开放,因为安卓不能像IOS一样局域播放,默认的全屏会使得一些界面操作被阻拦,如果是全屏H5还好,但是做直播的话,诸如弹幕那样的功能就无法实现了,所以这时候同层播放的概念就解决了这个问题。不过笔者在测试的过程中发现,不同版本的IOS和安卓效果略有不同。
x5-video-orientation:声明播放器支持的方向,可选值landscape 横屏,portraint竖屏。默认值portraint。无论是直播还是全屏H5一般都是竖屏播放,但是这个属性需要x5-video-player-type开启H5模式
x5-video-player-fullscreen="true":全屏设置。ture和false的设置会导致布局上的不一样

支付宝的方案:

支付宝默认是Apollo播放器,而要支持设置层级问题,在支付宝客户端10.1.8版本增加了raw-controls属性,用于切换硬解解码,该方式可以使video切换成系统播放器,到这里我们就可以控制它的层级了。
image.png
image.png

而遇安卓到的另外一个问题:poster设置后在安卓系统无效,安卓会自动切换为视频第一帧,经过排查,加上preload 预加载属性,安卓会存在该问题,而IOS正常,通过判断当前手机机型为安卓还是IOS,安卓不使用preload属性即可暂时解决,如果你有好的方案欢迎留言告知,感激不尽~
### H5视频播放层级问题及国产手机兼容性分析 在HTML5开发过程中,尤其是在移动端浏览器环境下,视频播放的层级问题是一个常见的挑战。特别是在国产手机上,由于不同厂商对Web标准的支持程度存在差异,可能会遇到一些特殊的兼容性问题。 #### 1. Z-Index 层级控制 Z-index 是 CSS 中用来定义元素堆叠顺序的一个属性。理论上,具有更高 `z-index` 值的元素会显示在其较低值的上方。然而,在实际应用中,尤其是涉及 `<video>` 标签时,可能存在以下特殊情况: - **原生控件覆盖问题** 在某些安卓设备上,当使用 HTML5 的 `<video>` 标签并启用其默认控件时,这些控件实际上是通过系统的原生组件实现的。这种情况下,即使设置了较高的 `z-index`,也无法让其他自定义层(如按钮或提示框)覆盖视频控件[^1]。 - **解决方法** 可以尝试关闭默认控件并通过 JavaScript 实现自定义控件来规避此问题。例如: ```javascript const videoElement = document.querySelector('video'); videoElement.controls = false; ``` #### 2. GPU 加速与性能优化 为了提升视频播放体验,建议启用硬件加速功能。这可以通过设置 `-webkit-transform: translate3d(0,0,0)` 或者 `transform: translate3d(0,0,0)` 来强制触发 GPU 渲染管道。这种方法不仅有助于改善动画流畅度,还能减少因复杂布局引起的卡顿现象。 #### 3. 圆角样式失效修复 如果发现部分 Android 手机上的视频容器无法正常渲染圆角效果,则可以引入额外的 CSS 属性 `background-clip: padding-box;` 进行修正。该声明能够确保背景颜色不会溢出到边框区域之外,从而保持预期的设计外观。 #### 4. 输入框占位符调整 对于嵌入式视频页面中的交互元素(比如评论区),需要注意 placeholder 文字可能出现的位置偏差问题。对此可采用如下策略加以应对:单独为 placeholer 设置顶部填充距离而不指定具体行高等参数。 ```css input::placeholder { padding-top: 8px; } ``` #### 5. 行内块元素垂直居中技巧 考虑到用户体验的一致性,有时需将视频缩略图或其他关联图标与周围文字精确对齐。此时利用 `vertical-align: middle;` 即可达成目标[^2]。不过要注意的是,默认状态下 img 元素底部会有一定间隙,这是因为它们被当作字符对待所致;因此还需附加一句 `display: block;` 或者重新设定 vertical-align 值消除多余空间。 --- ### 总结 综上所述,针对 H5 视频播放过程里可能遭遇的各种层级冲突状况以及特定品牌终端引发的独特难题,开发者应当综合运用上述提到的技术手段予以妥善处置。唯有如此才能保障跨平台一致性的良好表现效果。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值