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


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 相关文章推荐
jQuery实现用户注册的表单验证示例
Aug 28 Javascript
判断输入是否为空,获得输入类型的JS代码
Oct 30 Javascript
基于javascript实现全国省市二级联动下拉选择菜单
Jan 28 Javascript
JQuery核心函数是什么及使用方法介绍
May 03 Javascript
JavaScript蒙板(model)功能的简单实现代码
Aug 04 Javascript
快速实现jQuery多级菜单效果
Feb 01 Javascript
vue router下的html5 history在iis服务器上的设置方法
Oct 18 Javascript
mongodb初始化并使用node.js实现mongodb操作封装方法
Apr 02 Javascript
JS求1到任意数之间的所有质数的方法详解
May 20 Javascript
elementUi vue el-radio 监听选中变化的实例代码
Jun 28 Javascript
js实现tab栏切换效果
Aug 02 Javascript
JavaScript中10个Reduce常用场景技巧
Jun 21 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
重新封装zend_soap实现http连接安全认证的php代码
2011/01/12 PHP
php和mysql中uft-8中文编码乱码的几种解决办法
2012/04/19 PHP
php的webservice的wsdl的XML无法显示问题的解决方法
2014/03/11 PHP
zf框架的registry(注册表)使用示例
2014/03/13 PHP
php分页示例分享
2014/04/30 PHP
js更优雅的兼容
2010/08/12 Javascript
深入理解JavaScript系列(4) 立即调用的函数表达式
2012/01/15 Javascript
jquery+ajax验证不通过也提交表单问题处理
2014/12/12 Javascript
jquery实现从数组移除指定的值
2015/06/24 Javascript
学习JavaScript设计模式(封装)
2015/11/26 Javascript
webpack中CommonsChunkPlugin详细教程(小结)
2017/11/09 Javascript
mpvue中配置vuex并持久化到本地Storage图文教程解析
2018/03/15 Javascript
vuejs实现折叠面板展开收缩动画效果
2018/09/06 Javascript
新年快乐! javascript实现超级炫酷的3D烟花特效
2019/01/30 Javascript
Vue.js实现立体计算器
2020/02/22 Javascript
JavaScript接口实现方法实例分析
2020/05/16 Javascript
浅谈vue单页面中有多个echarts图表时的公用代码写法
2020/07/19 Javascript
[01:45]IMBATV TI4前线报道-选手到达
2014/07/07 DOTA
浅谈Python单向链表的实现
2015/12/24 Python
Python字符串拼接、截取及替换方法总结分析
2016/04/13 Python
浅谈python装饰器探究与参数的领取
2017/12/01 Python
Python实现的双色球生成功能示例
2017/12/18 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
2018/07/10 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
2018/12/10 Python
Python判断telnet通不通的实例
2019/01/26 Python
快速解决jupyter启动卡死的问题
2020/04/10 Python
在django admin中配置搜索域是一个外键时的处理方法
2020/05/20 Python
HTML5 WebSocket实现点对点聊天的示例代码
2018/01/31 HTML / CSS
办公室助理岗位职责
2013/12/25 职场文书
全陪导游欢迎词
2014/01/17 职场文书
计算机售后服务承诺书
2014/05/30 职场文书
安全口号大全
2014/06/21 职场文书
学会掌握自己命运的十条黄金法则:
2019/08/08 职场文书
nginx对http请求处理的各个阶段详析
2021/03/31 Servers
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
2021/04/13 Javascript
golang中字符串MD5生成方式总结
2021/07/04 Golang