描述:基于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. java中继承的内存分析

    本文主要讲述java中继承的内存分析. 示例1,代码如下: public class EncapsulationTest { public static void main(String[] args ...

  2. 甜点cc的2022年回顾总结

    每每到年底,总会感概时间飞逝,总会莫名的心慌几天. 高中时代我就明白了一个道理:自己决定做的事,就算结果再烂以后也不要后悔,因为那无异于否定过去的自己.人不能总是否定自己的过去,因为我觉得这样会打击自 ...

  3. Java基础学习笔记-数据类型、数制

    数据类型,跟JS感觉差异不是很大,但是有个String不是很一样的样子 数据类型分为 基本数据类型和复合数据类型 基本数据类型分为下面三种 数值类型 1.整数类型:byte,short,int,lon ...

  4. webpack 中 loader 和 plugin 的区别

    通俗点讲loader是转换,plugin是执行比转换更复杂的任务,比如合并压缩等 loader:让webpack能够处理非js文件,然后你就可以利用 webpack 的打包能力,对它们进行处理. 例如 ...

  5. Spring Native打包本地镜像,无需通过Graal的maven插件buildtools

    简介 在文章<GraalVM和Spring Native尝鲜,一步步让Springboot启动飞起来,66ms完成启动>中,我们介绍了如何使用Spring Native和buildtool ...

  6. STL关联式容器使用注意、概念总结

    引入 继上文 STL序列式容器使用注意.概念总结 继续总结关联式容器的概念以及一些使用事项. 关联式容器与容器适配器 基础容器 STL 中的关联式底层容器:RB tree, hash table,可以 ...

  7. RAM算法原理

    1 应用场景 信道的不对称性和信道的高波动是移动环境中无线信道的两个显著特征.因此,当在车辆网络等移动环境中使用IEEE 802.11设备时,有一个能够处理这些问题的有效速率自适应方案至关重要.RAM ...

  8. Python 内置界面开发框架 Tkinter入门篇 丙(文末有福利彩蛋,今天可是元宵节)

    以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」https://mp.weixin.qq.com/s/B1hH5Qzd2RkAiiUId1tLWw 本文大概 2874 个字 ...

  9. vue3 | slots

    一.什么是插槽 插槽就是子组件中的提供给父组件使用的一个占位符,用<slot></slot>  表示,父组件可以在这个占位符中填充任何模板代码,如 HTML.组件等,填充的内容 ...

  10. 简单了解C语言如何构建多文件项目

    简单理解C语言如何构建工程 首先我们最好有一个好用的编辑器,vscode也好,visual studio也罢,dev也行,这里我们使用的是code::block: 一.了解C语言工程的构建原理 ​ 首 ...