uniapp的video组件错位怎么回事

1. 什么是uniapp的video组件?

视频组件是uni-app提供的一个展示视频的组件,类似于 HTML 中的 video 标签,方便小程序开发者进行视频的播放控制。

2. uniapp的video组件错位的问题

2.1 具体表现

在使用uniapp的video组件进行视频播放的过程中,有时候会出现视频错位的问题,即视频会在页面中无法进行正确的居中显示,出现偏移。

如下图所示:

2.2 分析原因

在使用video组件进行视频播放时,如果播放器和容器的宽高不一致,视频容器里面就需要算出各个视频组件的大小和位置,此时就有可能会出现居中错位的情况。

因此,如果我们使用了类似下面的 CSS 代码,则有可能会导致视频居中错位的问题:

示例代码:

<style>

.video-container {

width: 300rpx;

height: 200rpx;

display: flex;

justify-content: center;

align-items: center;

}

</style>

<view class="video-container">

<video src="xxx"></video>

</view>

上述代码中,我们使用了 display: flex; 和 justify-content: center; align-items: center; 的 CSS 样式,希望能够让视频居中显示。但是,如果在使用 uni-app 的 video 组件时,使用了类似上面的 CSS 样式,就会导致视频居中显示错位的问题。

原因是 flex 布局会根据元素内容自动调整各个元素的大小和宽高比例,如果在video 嵌套 div 容器时, div 加上 flex 布局,该容器会自适应调整宽度,而 Video 组件自身是具备宽高比例的,当 Video 组件添加 object-fit 属性后,宽高比例不一致,也就出现了偏移现象。

2.3 解决方法

那么,要如何才能解决这个问题呢?下面提供两种解决方法。

方法一:通过 CSS 代码进行解决

若想通过 CSS 代码来解决该问题,可以使用下列 CSS 样式:

/*注意:修改类名 video-container*/

.video-container {

position: relative;

width: 300rpx;

height: 200rpx;

overflow: hidden;

}

.video-container video {

position: absolute;

height: 100%;

width: 100%;

top: 0;

left: 0;

}

上述代码中,我们通过设置将video组件的位置设置成绝对定位,然后通过top、left、right、bottom四个属性进行定位,这样就可以让video组件始终真正地居中显示。

方法二:通过使用view组件进行解决

若不想修改 CSS 样式,可以使用 view 组件来解决该问题:

<view class="video-wrapper">

<view class="video-content">

<video ... />

</view>

</view>

示例代码中添加了两个 view 容器,我们首先让外部的 view 容器作为 video 包裹器,根据外部 view 容器设置宽高;

然后,在容器 package 引入一个额外的 view 容器,其内部的 video 组件通过设置宽高为 100%,使视频在容器内可自适应。

这个方法看起来并不直观,但却可以有效地解决居中偏移问题。

3. 总结

uniapp 的 video 组件是一个非常方便小程序开发者进行视频播放控制的组件,但是在实际的开发过程中,可能会遇到 video 组件展示不居中的问题。

针对这个问题,本文提供了两种解决方法,详见上述内容。大家可以依据实际情况进行选择,并进行相应的代码修改。