描述:基于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>

vue - video视频播放完后重置播放,离开页面暂停所有视频,轮播切换后暂停播放所有视频的更多相关文章

  1. 一款基于jQuery轮播切换焦点图,可播放多张图片

    今天给大家分享一款基于jQuery轮播切换焦点图,可播放多张图片,在这个组件中,你可以任意指定8张图片,然后插件就会帮你自动生成缩略图,并且自动开始切换播放图片.当然,你也可以手动切换图片,只要点击缩 ...

  2. Vue实现音乐播放器(七):轮播图组件(二)

    轮播图组件 <template> <div class="slider" ref="slider"> <div class=&qu ...

  3. vue项目一个页面使用多个轮播图详解

    1.html代码: <div v-for="(item,index) in arrDataList.Floor"> // 根据后台数据循环渲染多个轮播图组件 <d ...

  4. Swiper轮播手动后不动

    最近项目首页轮播图用了Swiper轮播,今天突然发现轮播图动画初始正常但是手动换过之后就不动了,解决方法有两种,具体根据采用的情况为准: 1.autoplayDisableOnInteraction: ...

  5. swiper在vue项目中的循环轮播bug以及点击事件

    一般的,如果是静态数据(本地数据),可以直接在mounted生命周期中初始化,循环轮播.自动播放都比较正常. 但是,如果是动态从后台获取数据的话,采用上述方法会发现,轮播图无法自动播放,也无法拖拽. ...

  6. js原生选项卡(自动播放无缝滚动轮播图)二

    今天分享一下自动播放轮播图,自动播放轮播图是在昨天分享的轮播图的基础上添加了定时器,用定时器控制图片的自动切换,函数中首先封装一个方向的自动播放工能的小函数,这个函数中添加定时器,定时器中可以放向右走 ...

  7. EasyPlayer RTSP Android安卓播放器实现视频源快速切换

    EasyPlayer现在支持多视频源快速切换了,我们介绍一下是如何实现的. 这个需求通常应用在一个客户端需要查看多个视频源的情况,比如多个监控场景轮播. 由于EasyPlayer的播放端已经放在Fra ...

  8. vue video全屏播放

    需求: 1.视频为长方形,页面初始化打开为横屏全屏播放视频. 2.微信不支持自动播放,故自动播放需求删除. 方法: 1.vue-video-player插件 因需求较简单,仅要求播放本地一个视频,故未 ...

  9. 移动端HTML5<video>视频播放优化实践

    遇到的挑战 移动端HTML5使用原生<video>标签播放视频,要做到两个基本原则,速度快和体验佳,先来分析一下这两个问题. 下载速度 以一个8s短视频为例,wifi环境下提供的高清视频达 ...

  10. 移动端HTML5<video>视频播放优化实践[转]

    http://blog.csdn.net/u010918416/article/details/52705732 http://www.xuanfengge.com/html5-video-play. ...

随机推荐

  1. 聊聊CPU的发展历程之单核、多核、超线程

    作者:小牛呼噜噜 | https://xiaoniuhululu.com 计算机内功.JAVA底层.面试.职业成长相关资料等更多精彩文章在公众号「小牛呼噜噜」 大家好,我是呼噜噜,在计算机的早期,In ...

  2. selenium 输入文本时报InvalidElementStateException: Message: invalid element state

    问题: 当定位输入框时,定位到div标签,如:css->[class="delay el-input"],进行输入操作报invalid element state,显示元素状 ...

  3. m3u8文件后缀jpg,png等处理方法及视频合并

    处理 # 解析伪装成png的ts def resolve_ts(src_path, dst_path): ''' 如果m3u8返回的ts文件地址为 https://p1.eckwai.com/ufil ...

  4. 数值分析——插值(一)、Runge现象

    在数值分析中,插值方法是基础且重要的.本文将介绍Lagrange插值公式与Newton插值公式.此外,针对Runge现象,本文给出了稍稍详细的讨论. 一.Lagrange插值公式 假设函数 \(y=f ...

  5. CONDITION EVALUATION DELTA热部署启动失效

    1.问题描述 我在启动一个SpringBoot项目的时候,在启动中控制台不停的打印日志(如下图所示) 2.产生原因 当时我是看了这篇文章后CONDITION EVALUATION DELTA_苦逼码农 ...

  6. [编程基础] Python日志记录库logging总结

    Python日志记录教程展示了如何使用日志记录模块在Python中进行日志记录. 文章目录 1 介绍 1.1 背景 1.2 Python日志记录模块 1.3 根记录器 2 Python logging ...

  7. node设置下载源

    // 设置镜像源 npm config set registry https://registry.npm.taobao.org // 查看当前源 npm config get registry

  8. vue学习笔记(一) ---- vue指令(总体大纲)

    一.什么是Vue 官方文档:https://cn.vuejs.org/v2/guide/ 关键字: 渐进式框架 自底向上增量开发 视图层 单文件组件 复杂的单页应用 复杂的单页应用: 顾名思义,单页应 ...

  9. 【读书笔记】JS函数式编程指南

    第一章 海鸥群可以合并和繁育 conjoin breed var result = flock_a.conjoin(flock_c).breed(flock_b).conjoin(flo ck_a.b ...

  10. 元数据库 information_schema.tables

    转  https://www.cnblogs.com/ssslinppp/p/6178636.html 1.information_schema数据库 对于mysql和Infobright等数据库,i ...