在实际工作中经常会遇到swiper轮播多个视频,播放视频不轮播不循环

loop:true下问题:

(1)slides前后会复制若干个slide,成一个环路,不会复制绑定在dom上@click事件,
 解决方法:不要在html绑定@click事件监听不到 使用swiper的onclick回调函数即:$(".video").on("click",function(){...}),
(2)loop:true下能监听到slideChangeTransitionEnd:只是this.activeIndex值不在是数据的index值,
 on: {
slideChangeTransitionEnd: function(){
console.log(this.activeIndex)
},
},

(3)loop:true下当前选中slide带有class:.swiper-slide-active 做相关操作在这个class下处理

(4)监听视频播放状态 
$(".swiper-slide-active video").on('play',function(){
//播放状态
});
$(".swiper-slide-active video").on('pause',function(){
//暂停状态
});
(5)控制轮播状态
停止自动轮播:_this.swiper1.autoplay.stop();
启动自动轮播:_this.swiper1.autoplay.start();

3、loop:false下问题:

可以在html上绑定@click事件,但避免出问题最好在JS里onclick回调方法
 this.activeIndex正常从0开始 ,slide个数是真实长度

 on: {
slideChangeTransitionEnd: function(){
console.log(this.activeIndex)
},
},

不循环loop去掉就行

------------------------------------------------------------------------------------------------------------------------

例:

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>3、video多视频swiper播放停止轮播循环loop=true</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
<!-- 公用css -->
<link rel="stylesheet" href="css/public/reset.css">
<link rel="stylesheet" href="css/public/common.css">
<link rel="stylesheet" href="css/public/swiper.min.css">
<!-- rem.js -->
<script src="js/must/rem.js"></script>
<style>
.video{position:relative;overflow:hidden;width:60%;height:60%;margin:10% auto 0 auto}
.video-cover{position:absolute;z-index:10;width:100%;height:100%;top:0;left:0;background:rgba(0,0,0,0.3)}
img{display:block;width:100%}
.video-cover .play-ico{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%)}
</style>
</head>
<body>
<div id="app" v-cloak>
<!-- 页面进入视频倒计时播放 -->
<div class="video">
<div class="swiper-container">
<div class="swiper-wrapper" style='height:auto'>
<div class="swiper-slide" style='height:100%' v-for='item,index in videoData'>
<div class="video-cover">
<img class="play-ico" style="width: .5rem;" src="data:images/play.png" alt="">
<img class="videoImg":src="item.image_cover" alt="" >
</div> <div class="video-box" :class = "'dialog'+index">
<video :id="'video'+index" type="video/mp4" :src="item.videoPlay" controls="controls" class="videos" style='width:100%;'></video>
</div>
</div>
</div>
<div class="swiper-pagination" style ="width: 20%;transform: translateX(-50%);left: 50%;height: 34px;"></div>
</div>
</div>
</div>
<!-- 公用js -->
<script src="js/must/vue.js"></script>
<script src="js/must/swiper.min.js"></script>
<script src="js/must/jquery_1.12.3_jquery.min.js"></script>
<script src="js/index.js"></script>
</body>
</html>

index.js

var vm = new Vue({
el:'#app',
data:{
// 视频data
videoData:[
{
image_cover: "http://mall.faw-vw.com/shop-m/page/activity/2020-0606/images/playImg1.png",
videoPlay: "http://mall.faw-vw.com/shop-m/page/activity/2020-0606/images/video1.mp4",
},
{
image_cover: "http://mall.faw-vw.com/shop-m/page/activity/2020-0606/images/playImg2.jpg",
videoPlay: "http://mall.faw-vw.com/shop-m/page/activity/2020-0606/images/video2.mp4",
}
],
swiper1:''
},
created(){
},
mounted: function () {
var _this = this;
_this.swiper1 = new Swiper('.swiper-container',{
observer: true, //解决刷新不能滑动问题
observeParents: true, //解决刷新不能滑动问题
observeSlideChildren:true,
slidesPerView: 'auto',
autoHeight: true,
initialSlide: 0,
loop: true,
autoplay: true,
on: {
// 监听轮播:loop: true时this.activeIndex不在是数据索引,而是复制多个的slide个数值,
// loop去掉时 this.activeIndex是数据索引,slide个数是数据length
slideChangeTransitionEnd: function(){
console.log(this.activeIndex)
// 轮播时所有视频停止播放, 封面图显示,视频隐藏
var videoLength=$(".videos").length;
for(var i=0; i<videoLength; i++){
$(".videos").eq(i)[0].pause();
}
$(".video-cover,.videoImg").show();
$(".video-box").hide();
},
},
pagination: {
el: '.swiper-pagination',
clickable: true,
},
});
// 视频播放事件创建 loop为true时会复制多个slide,无法监听元素索引值,不要在html上@click,要绑定class用js实现
$(".video-cover").on("click",function(){
_this.playVideo();
})
},
methods:{
playVideo: function () {
var _this = this;
_this.swiper1.autoplay.stop();
$(".swiper-slide-active .video-cover,.swiper-slide-active .videoImg").hide();
$(".swiper-slide-active .video-box").show();
// 点击哪个视频哪个播放
$(".swiper-slide-active .video-box .videos")[0].play();
//监听当前视频播放状态
$(".swiper-slide-active .video-box .videos").on('play',function(){
_this.swiper1.autoplay.stop()
});
$(".swiper-slide-active .video-box .videos").on('pause',function(){
_this.swiper1.autoplay.start()
});
},
},
})

video多视频轮播Swiper 播放视频不轮播不循环的更多相关文章

  1. 群晖synology的Video Station无法通过浏览器在线播放视频

    群晖synology的Video Station无法通过浏览器在线播放视频 http://www.hangge.com/blog/cache/detail_419.html

  2. 手机浏览器自动播放视频video(设置autoplay无效)的解决方案

    1.问题的提出 某一天接了个需求,需要在手机的H5页面内加入视频,我开开心心做完,准备交付的时候,问题来了,PM想要用户一进入页面,视频就开始播放,不需要用户手动点击. 2.尝试解决 加autopla ...

  3. video播放视频以及相关事件

    <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Conten ...

  4. 使用VideoView播放视频

    为了在Android应用中播放视频,Android提供了VideoView组件,它就是一个位于android.widget包下的组件,它的作用与ImageView类似,只是ImageView用于显示图 ...

  5. android: 播放视频

    播放视频文件其实并不比播放音频文件复杂,主要是使用 VideoView 类来实现的.这个 类将视频的显示和控制集于一身,使得我们仅仅借助它就可以完成一个简易的视频播放器. VideoView 的用法和 ...

  6. Android 视频播放器 (一):使用VideoView播放视频

    一.简介 作为Android开发,我们不可避免的会接触到视频播放,VideoView做为最简单的播放器,我们是不应该不会的. 下面简单介绍一下VideoView: VideoView是使用MediaP ...

  7. Android开发之使用VideoView播放视频

    Android提供了 VideoView组件.它的作用与ImageView类似,仅仅是ImageView用于显示图片.而VideoView用于播放视频. 使用VideoView播放视频的过程例如以下: ...

  8. iOS视频边下边播--缓存播放数据流

    实现视频边下边播,这里的边下边播不是单独开一个子线程去下载,而是把视频播放的数据给保存到本地.简而言之,就是使用一遍的流量,既播放了视频,也保存了视频. 用到的框架:<AVFoundation/ ...

  9. HTML5 video标签播放视频下载原理

    HTML5 video https://github.com/remy/html5demos/blob/master/demos/video.html <video preload=" ...

  10. 解决html5 video不能播放 能播放声音不能播放视频

    <video id="playVideo" style="width:90%; height:auto;" controls poster=". ...

随机推荐

  1. 如何使用 System.Text.Json 序列化 DateTimeOffset 为 Unix 时间戳

    在 .NET 中,日期和时间通常使用 DateTime 或 DateTimeOffset 来表示.这两种数据类型都可以表示日期和时间,但它们之间有一些明显的区别.DateTime 是不带时区信息的,而 ...

  2. 体验 Gitea Actions

    即将推出的 Gitea Actions 致力于打造一个 CI/CD 工具的标准协议,第三方 CI 系统可以基于actions 协议与 Gitea 平台集成,提供一站式管理方案.Gitea Action ...

  3. python模块(module)

    目录 模块化(module)程序设计理念 模块和包概念的进化史 标准库模块(standard library) 为什么需要模块化编程 模块化编程的流 模块的 API 和功能描述要点 模块的创建和测试代 ...

  4. js取不到iframe元素

    跨域 iframe 请绕道,下文是针对非跨域 iframe 的问题排除 1.iframe 取不到值的问题的原因 1. 父页面未加载完成 2. iframe 未加载完成 3. 语法使用错误 4. 跨域( ...

  5. MarkDown语法----纯文本格式的标记语言

    一.基本语法 1.标题 一级标题: "# + 空格 + 标题内容" 二级标题: "## + 空格 + 标题内容" .... 2.字体 粗体: "**+ ...

  6. 10分钟做好 Bootstrap Blazor 的表格组件导出 Excel/Word/Html/Pdf

    上篇: Bootstrap Blazor 实战 通用导入导出服务(Table组件) 1.新建工程 新建工程b14table dotnet new blazorserver -o b14table 将项 ...

  7. [WPF]使用Fody提高效率

    下载安装及使用 代码实例 public class Person:INotifyPropertyChanged { public event PropertyChangedEventHandler P ...

  8. [数据结构]Dijkstra算法求单源最短路径

    概念 求带权有向图中某个源点到其余各个顶点的最短路径,最常用的是Dijkstra算法.该算法设置一个集合S记录已求得的最短路径的顶点,可用一个数组s[]来实现,初始化为0,当s[Vi]=1时表示将顶点 ...

  9. 虚拟化技术浅析第二弹之初识Kubernetes

    作者:京东物流 杨建民 一.微服务架构起源 单体架构:可以理解为主要业务逻辑模块(我们编写的代码模块,不包括独立的中间件)运行在一个进程中的应用,最典型的是运行在一个Tomcat容器中,位于一个进程里 ...

  10. Swagger的基本使用

    Swagger简介和使用 使用Swagger你只需要按照它的规范去定义接口及接口相关的信息,再通过Swagger衍生出来的一系列项目和工具,就可以做到生成各种格式的接口文档,以及在线接口调试页面等等. ...