小程序视频列表中视频的播放与停止的示例代码


Posted in Javascript onJuly 20, 2018

效果类似一条视频的小程序,就是视频列表,然后每个视频上覆盖一张视频的封面图,点击封面图的播放按钮视频播放,点击别的视频的时候,停止播放当前视频,播放点击的视频。差不多是这样:

小程序视频列表中视频的播放与停止的示例代码

一条视频

首先上代码:

wxml

<block wx:for="{{videoList}}">
  <view class='video-item'>
   <view class='wrapper'>
     <video class='video-video' wx:if='{{index==videoIndex}}' id='video{{index}}' autoplay='{{true}}' show-center-play-btn="{{false}}" src='{{item.resource_add}}'></video>
     <image class='video-video2' wx:if='{{index!=videoIndex}}' mode='aspectFill' src='{{item.coverimg}}'></image>
     <image class='videoPlay' wx:if='{{index!=videoIndex}}' data-index='{{index}}' bindtap='videoPlay' src='/images/icon/play.png'></image>
    </view>
    <view class='video-name'>{{item.title}}</view>
    <view class='video-desc' style="{{item.upStatus?'':'display:-webkit-box'}}">{{item.description}}</view>
    <view class='video-bottom'>
      <view class='video-btn' data-index="{{index}}" bindtap='upDown'>
        <image hidden='{{item.upStatus}}' src='/images/icon/slide.png'></image>
        <image hidden='{{!item.upStatus}}' src='/images/icon/up.png'></image>
        <text>{{!item.upStatus?'展开':'收起'}}</text>
      </view>
    </view>
  </view>
</block>

js

videoPlay(event){
  var index = video.getDataSet(event, 'index');

  if (!this.data.videoIndex) { // 没有播放时播放视频
    this.setData({
      videoIndex: index
    })     
    var videoContext = wx.createVideoContext('video' + index)
    videoContext.play()
  } else {
    var videoContextPrev = wx.createVideoContext('video' + this.data.videoIndex)
    videoContextPrev.stop()
    this.setData({
      videoIndex: index
    }) 
    var videoContextCurrent = wx.createVideoContext('video' + index)
    videoContextCurrent.play()
  }
},

在页面布局上,我们让视频的封面图定位在视频的容器中,将播放按钮定位到视频容器中,且层级最高。因为需求是点击封面图上的播放按钮视频开始播放,所以将show-center-play-btn设置为flase。在循环绑定数据时,将循环的index拼成视频的ID,将循环的index作为属性绑定到播放按钮。

在JS中,首先我们设置videoIndex来表示当前播放的视频在列表中的位置,它的初始值为null。

视频的播放与暂停

当点击事件发生时,首先获取点击的index,然后判断videoIndex的值:

  1. 如果videoIndex值为null,则表示这是第一次点击,将index绑定到videoIndex上,然后通过var videoContext = wx.createVideoContext('video' + index)来获取当前点击的视频,并使用videoContext.play()将视频进行播放。
  2. 如果videoIndex的值不为null,则表示这不是第一次点击,我们首先应该将正在播放的视频停止,然后在播放点击的视频。此时,videoIndex的值表示正在播放的视频在列表中的位置,我们通过var videoContextPrev = wx.createVideoContext('video' + this.data.videoIndex)来获取正在播放的视频上下文,然后通过videoContextPrev.stop()把它停止。最后我们将获取到的index值重新绑定到videoIndex上表示点击视频的序号,然后重复步骤一。

封面图处理

我们已经给封面图和封面图上的播放按钮进行处理了,用微信的wx:if或者hidden就可以了,当videoIndex等于index的时候,表示要播放这个视频,将视频显示并播放,封面图和播放按钮隐藏就可以了。

一点小坑

一开始考虑到性能,由于wx:if在页面加载的时候并不渲染数据,频繁点击的话频繁渲染数据,有点影响性能,就采用了hidden方法,使用hidden方法处理封面图和播放按钮一点问题也没有,处理视频的话有时候会出现视频不播放,并且显示中间播放按钮的情况,所以采用了wx:if,这样页面开始渲染的时候不渲染视频,点击之后渲染视频,并且设置视频自动播放,就可以啦~~~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
广告显示判断
Aug 31 Javascript
Jquery实现由下向上展开效果的例子
Dec 08 Javascript
基于Javascript实现二级联动菜单效果
Mar 04 Javascript
判断JS对象是否拥有某属性的方法推荐
May 12 Javascript
ajax级联菜单实现方法实例分析
Nov 28 Javascript
jQuery插件FusionCharts绘制的2D条状图效果【附demo源码】
May 13 jQuery
vue2.0 中#$emit,$on的使用详解
Jun 07 Javascript
详解Vue之父子组件传值
Apr 01 Javascript
使用Vue中 v-for循环列表控制按钮隐藏显示功能
Apr 23 Javascript
bootstrap datepicker的基本使用教程
Jul 09 Javascript
es6中Promise 对象基本功能与用法实例分析
Feb 23 Javascript
解决removeEventListener 无法清除监听的问题
Oct 30 Javascript
微信小程序实现topBar底部选择栏效果
Jul 20 #Javascript
JS+H5 Canvas实现时钟效果
Jul 20 #Javascript
详解处理bootstrap4不支持远程静态框问题
Jul 20 #Javascript
基于Vue+element-ui 的Table二次封装的实现
Jul 20 #Javascript
webpack+vue-cil中proxyTable处理跨域的方法
Jul 20 #Javascript
详解vue-cli官方脚手架配置
Jul 20 #Javascript
Vue中的异步组件函数实现代码
Jul 20 #Javascript
You might like
PHP 采集心得技巧
2009/05/15 PHP
ci检测是ajax还是页面post提交数据的方法
2014/11/10 PHP
Yii入门教程之Yii安装及hello world
2014/11/25 PHP
PHP中__set()实例用法和基础讲解
2019/07/23 PHP
laravel实现Auth认证,登录、注册后的页面回跳方法
2019/09/30 PHP
Laravel5.1 框架响应基本用法实例分析
2020/01/04 PHP
javascript parseInt 大改造
2009/09/27 Javascript
javascript下string.format函数补充
2010/08/24 Javascript
可以用鼠标拖动的DIV实现思路及代码
2013/10/21 Javascript
使用jquery操作session方法分享
2015/01/22 Javascript
JavaScript常用数组算法小结
2016/02/13 Javascript
JS中如何比较两个Json对象是否相等实例代码
2016/07/13 Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
2016/10/10 Javascript
Ajax异步文件上传与NodeJS express服务端处理
2017/04/01 NodeJs
jquery处理checkbox(复选框)是否被选中实例代码
2017/06/12 jQuery
JavaScript实现的原生态Tab标签页功能【兼容IE6】
2017/09/18 Javascript
clipboard在vue中的使用的方法示例
2018/10/19 Javascript
微信内置浏览器图片查看器的代码实例
2019/10/08 Javascript
vue实现图片懒加载的方法分析
2020/02/05 Javascript
[02:58]献给西雅图的情书_高清
2014/05/29 DOTA
[03:45]Newbee战队出征西雅图 决战2016国际邀请赛
2016/08/02 DOTA
[02:12]打造更好的电竞完美世界:完美盛典回顾篇
2018/12/19 DOTA
[01:01:52]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第二场 1月9日
2021/03/11 DOTA
python内置函数:lambda、map、filter简单介绍
2017/11/16 Python
用python建立两个Y轴的XY曲线图方法
2019/07/08 Python
pytorch构建多模型实例
2020/01/15 Python
Python3 Click模块的使用方法详解
2020/02/12 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
2020/03/28 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
2020/09/24 Python
HTML5 图片悬停放大的实现代码示例
2019/12/04 HTML / CSS
请编程遍历页面上所有 TextBox 控件并给它赋值为 string.Empty
2015/12/03 面试题
企业管理毕业生求职信范文
2014/03/07 职场文书
社区创先争优承诺书
2014/08/30 职场文书
2014年作风建设工作总结
2014/10/29 职场文书
2015少先队大队辅导员工作总结
2015/07/24 职场文书
几款流行的HTML5 UI框架比较(小结)
2021/04/08 HTML / CSS