描述:基于vue-awesome-swiper的多视频处理

    slideChangeTransitionEnd:轮播切换时暂停播放

父组件

<swiper ref="mySwiper" :options="swiperOption" v-if="bannerList.length" @slideChangeTransitionEnd="stopOther"> 
  <swiper-slide v-for="(si, sidx) in bannerList" :key="'plant_banner' + sidx">   
    <VVideo :src="si.pic" :poster="si.pic_cover" :class="`bannerVideo${sidx}`" :ref="`bannerVideo${sidx}`" :videoPlayer="'bannerVideo'+sidx" @stopOther="stopOther"></VVideo>  
  </swiper-slide>   
<div class="swiper-pagination" slot="pagination"></div>
</swiper>
beforeRouteLeave(to, from, next) {
this.stopOther();
next();
},
methods: {
// 暂停其他视频
stopOther(v) {
const refs = this.$refs;
let refsList = Object.keys(refs);
refsList.forEach((item) => {
console.log(item);
const videoDom = document.querySelector(`.${item}>video`);
if (!videoDom || item == v) return;
this.$refs[item][0].playState = false;
this.$refs[item][0].controls = false;
videoDom.pause && videoDom.pause();
});
},
}

子组件

<template>
<div class="v-video"
<video :ref="videoPlayer" class="video" :class="videoPlayer" :src="src" webkit-playsinline="true" playsinline="true" controlsList="nodownload" @click="togglePlay()">
<source :src="src" type="video/mp4" />
您的浏览器不支持 video 视屏播放。
</video>
<img class="video__poster" v-if="!playState" :src="poster" alt="" @click="togglePlay()">
<img v-if="!playState" class="video__btn" src="../common/images/play_pause.png" alt="" @click="togglePlay()" />
</div>
</template>
<script>
export default {
props: {
src: {
//视频链接
type: String,
default: "",
},
poster: {
//海报链接
type: String,
default: "",
},
videoPlayer: {
type: String,
default: "",
},
},
data() {
return {
playState: false, //是否显示暂停按钮
};
},
mounted() {},
computed: {},
methods: {
togglePlay() {
console.log("this.videoPlayer", this.videoPlayer);
this.$emit("stopOther", this.videoPlayer);
this.$nextTick(() => {
let videoDom = this.videoPlayer && this.$refs[this.videoPlayer];
if (!videoDom) return;
if (!this.playState) {
videoDom && videoDom.play();this.playState = true;
} else {
videoDom && videoDom.pause();this.playState = false;
}
videoDom.onended = () => {
          this.playState = false;
        }
});
},
},
};
</script>
<style lang="stylus" scoped>
.v-video {
width: 100%;
height: 100%;
position: relative; >video {
width: 100%;
height: 100%;
} .video__poster {
width: 100%;
height: 100%;
object-fit: cover;
position: absolute;
left: 0;
top: 0;
z-index: 5;
} .video__btn {
width: 2.6rem;
height: 2.6rem;
position: absolute;
top: 50%;
left: 50%;
margin-left: - 1.3rem;
margin-top: -1.3rem;
z-index: 10;
}
}
</style>

最新文章

  1. Oracle常用SQL查询
  2. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(十三)台风模块
  3. SQL Server安全(5/11):架构与安全(Schemas and Security)
  4. log4net--不可多得的开源日志记录组件
  5. 【Linux】find grep 联合使用 过滤所有子目录、文件
  6. delete-by-query插件
  7. ASP.NET访问网络映射盘&amp;实现文件上传读取功能
  8. ASP.NET整理
  9. struts2标签具体解释
  10. Javascript 中神奇的 this
  11. [转]MTK6252 11B添加模块、task实例
  12. [Bjoi2018]二进制
  13. Integer诡异特性
  14. Docker 编排工具Rancher 1.6.18
  15. Python全栈开发-Day9-线程/GIL/事件/队列
  16. vm centos7中用NAT模式配置上网
  17. 6.6安装编译安装zabbix3.2
  18. OverAPI.com – 史上最全的开发人员在线速查手册
  19. 媒体文件audio 转 base64 编码 (利用 FileReader &amp; Audio 对象)
  20. Swift3 CADisplayLink简单用法

热门文章

  1. 从稍微懂一点开始的C++学习之路1: 智能指针
  2. 时间片差分调度法-充分利用MCU的资源
  3. VMware虚拟机开机黑屏解决方法
  4. cs231n__3. LostFunction
  5. apt install protobuf
  6. 焦距的物理尺度、像素尺度之间的转换关系以及35mm等效焦距
  7. python之路35 MySQL 3 字段的约束条件 外键关系
  8. [cocos2d-x]飞机大战 遇到的bug和总结(一)
  9. angular使用_HttpClient或者Fetch发送POST/GET请求下载/上传文件
  10. Java入门与进阶 P-2.1+P-2.2