uni-app使用video组件,同一时间只允许一个视频播放
刚开始使用的方法:
<video class="myVideo" :src="item.videoUrl"
:poster="$imgUrl + item.videoCoverImg" @play="playing(item.pgcId)"
:ref="item.pgcId" controls></video>
playing(e) {
// 获取当前视频id
let currentId = e;
// 获取json对象并遍历, 停止非当前视频
let trailer = this.video_list
for (let i = 0; i < trailer.length; i++) {
let temp = trailer[i].pgcId
if (temp !== currentId) {
console.log(this.$refs[temp])
this.$refs[temp][0].pause();
}
}
},
给video添加ref,使用refs来获取DOM元素,调用.pause()方法来关闭其他video
h5测试没有问题,但在app端测试时
报错:[Vue warn]: Error in v-on handler: “TypeError: this.$refs[temp][0].pause is not a function”
解决方法
<video class="myVideo" :src="item.videoUrl"
:poster="$imgUrl + item.videoCoverImg" @play="playing(item.pgcId)"
:id="item.pgcId" controls></video>
playing(e) {
let currentId = e; // 获取当前视频id
this.videoContent = uni.createVideoContext(currentId);
let trailer = this.video_list;
trailer.forEach(function(item, index) { // 获取json对象并遍历, 停止非当前视频
if (item.videoUrl != null && item.videoUrl != "") {
let temp = item.pgcId;
if (temp != currentId) {
uni.createVideoContext(temp).pause(); //暂停视频播放事件
}
}
})
},
使用uni.createVideoContext来操作video
官方文档:
uni.createVideoContext(videoId, this)
创建并返回 video 上下文 videoContext 对象。在自定义组件下,第二个参数传入组件实例this,以操作组件内 组件。
h5和app都可以实现