uni-app 安卓手机video标签poster封面图不随object-fit="fill"属性填充父容器 苹果手机正常
uni-app 安卓手机video标签poster封面图不随object-fit="fill"属性填充父容器 苹果手机正常
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | 20H2 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
PC开发环境操作系统版本号:20H2
HBuilderX类型:Alpha
HBuilderX版本号:3.2.8
手机系统:Android
手机系统版本号:Android 10
手机厂商:华为
手机机型:mate20, note10
页面类型:vue
打包方式:云端
示例代码:
```html
<template>
<view>
<video :src="src" :poster="poster" object-fit="fill"></video>
</view>
</template>
<script>
export default {
data() {
return {
src: 'https://www.budaos.com/bds/uploads/474182cc-b0db-45dd-90e1-cda620ba9a5d.mp4',
poster: 'https://www.budaos.com/bds/uploads/474182cc-b0db-45dd-90e1-cda620ba9a5d.jpg'
}
},
}
</script>
操作步骤: 新建uni-app工程,在index.vue中粘贴上述示例代码,目前是用的华为mate20和荣耀note10等屏幕比较大的设置,发现poster封面图没有填充父容器,播放时视频是可以填充的,导致视频播放时画面会拉伸闪一下。而苹果手机测试不会出现该问题,poster封面图也会填充父容器。vue和nvue页面均会出现该问题。
预期结果: video标签设置属性:object-fit=“fill” 安卓手机应该和苹果手机应该保持效果一致,poster封面图应该跟随视频属性填充父容器
实际结果: 安卓手机poster封面图未填充 苹果手机poster封面图填充了
bug描述: 安卓手机测试时,video标签设置属性object-fit=“fill”,视频播放可以正常填充父容器,但设置的poster封面图不会填充父容器,导致播放时总会闪一下。
更多关于uni-app 安卓手机video标签poster封面图不随object-fit="fill"属性填充父容器 苹果手机正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于uni-app 安卓手机video标签poster封面图不随object-fit="fill"属性填充父容器 苹果手机正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个已知的Android平台兼容性问题。在uni-app中,video组件的poster属性在Android设备上确实存在object-fit="fill"不生效的情况,而iOS设备表现正常。
问题原因: Android原生video控件对封面图样式的支持与iOS存在差异,poster图片默认采用居中显示而非填充模式。
临时解决方案:
- 使用CSS样式覆盖(推荐):
video {
width: 100%;
height: 100%;
object-fit: fill !important;
}
- 使用cover-view模拟封面: 如果上述CSS方案无效,可以尝试用cover-view覆盖在video上方模拟封面效果:
<template>
<view class="video-container">
<video :src="src" object-fit="fill"></video>
<cover-view class="poster" v-if="showPoster">
<image :src="poster" mode="aspectFill" class="poster-img"></image>
</cover-view>
</view>
</template>
<style>
.video-container {
position: relative;
width: 100%;
height: 300px; /* 根据实际需求调整 */
}
.poster {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.poster-img {
width: 100%;
height: 100%;
}
</style>
- 条件编译处理:
<template>
<video
:src="src"
:poster="poster"
:object-fit="objectFit"
:style="videoStyle"
></video>
</template>
<script>
export default {
data() {
return {
src: 'your-video-url',
poster: 'your-poster-url'
}
},
computed: {
objectFit() {
// #ifdef APP-PLUS
return 'fill'
// #endif
// #ifndef APP-PLUS
return 'fill'
// #endif
},
videoStyle() {
// #ifdef APP-ANDROID
return {
'object-fit': 'fill'
}
// #endif
return {}
}
}
}
</script>

