uniapp video时长如何获取或控制
在uniapp中,如何获取video组件的视频时长?另外,是否可以对视频时长进行控制或修改?比如在播放前设置特定的播放时长,或者在播放过程中动态调整时长。官方文档中似乎没有明确说明相关方法,求解答具体实现方式。
2 回复
在uniapp中,获取视频时长可通过@loadedmetadata事件,事件对象中的duration属性即为视频总时长。控制播放进度可用videoContext.seek()方法。
在 UniApp 中,获取或控制 <video> 组件的时长可以通过以下方法实现:
1. 获取视频时长
使用 @loadedmetadata 事件,当视频元数据加载完成后触发,可获取视频总时长(单位:秒)。
示例代码:
<template>
<view>
<video
src="/static/video.mp4"
@loadedmetadata="onVideoLoaded"
controls
></video>
<text>视频时长:{{ duration }} 秒</text>
</view>
</template>
<script>
export default {
data() {
return {
duration: 0
};
},
methods: {
onVideoLoaded(e) {
this.duration = e.detail.duration; // 获取总时长
}
}
};
</script>
2. 控制视频播放位置
通过 video 组件的 currentTime 属性设置播放时间点,或使用 seek() 方法跳转。
示例代码:
<template>
<view>
<video
ref="myVideo"
src="/static/video.mp4"
controls
></video>
<button @click="seekToTime(30)">跳转到 30 秒</button>
</view>
</template>
<script>
export default {
methods: {
seekToTime(time) {
const videoContext = this.$refs.myVideo; // 获取 video 组件实例
videoContext.seek(time); // 跳转到指定时间(秒)
}
}
};
</script>
3. 动态设置播放时长
- 限制播放时长:结合
@timeupdate事件监听播放进度,到达指定时间时暂停或跳转。 - 示例代码片段:
onTimeUpdate(e) { if (e.detail.currentTime > 60) { this.$refs.myVideo.pause(); // 超过 60 秒时暂停 } }
注意事项:
- 确保视频资源支持元数据读取(如 MP4 格式)。
- 部分平台(如小程序)可能对
seek操作有兼容性限制,需测试验证。
通过以上方法,即可灵活获取和控制视频时长。

