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


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 相关文章推荐
javascript 原型模式实现OOP的再研究
Apr 09 Javascript
jquery 表单下所有元素的隐藏
Jul 25 Javascript
九种js弹出对话框的方法总结
Mar 12 Javascript
jQuery中extend函数的实现原理详解
Feb 03 Javascript
JS截取字符串实例详解
Nov 24 Javascript
Vue.js中用v-bind绑定class的注意事项
Dec 13 Javascript
jquery mobile移动端幻灯片滑动切换效果
Apr 15 Javascript
vue图片加载与显示默认图片实例代码
Mar 16 Javascript
ES6基础之 Promise 对象用法实例详解
Aug 22 Javascript
JavaScript canvas动画实现时钟效果
Feb 10 Javascript
JS实现简单打字测试
Jun 24 Javascript
Vue-router编程式导航的两种实现代码
Mar 04 Vue.js
微信小程序实现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字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
用js查找法实现当前栏目的高亮显示的代码
2007/11/24 Javascript
actionscript与javascript的区别
2011/05/25 Javascript
Js实现动态添加删除Table行示例
2014/04/14 Javascript
技术男用来对妹子表白的百度首页
2014/07/23 Javascript
js实现从右向左缓缓浮出网页浮动层广告的方法
2015/05/09 Javascript
JavaScript+html5 canvas实现图片破碎重组动画特效
2016/02/22 Javascript
jQuery插件扩展实例【添加回调函数】
2016/11/26 Javascript
bootstrap datetimepicker 日期插件在火狐下出现一条报错信息的原因分析及解决办法
2017/03/08 Javascript
Vue.js结合bootstrap实现分页控件
2017/03/10 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
2017/06/07 Javascript
详解react-webpack2-热模块替换[HMR]
2017/08/03 Javascript
vue-router的两种模式的区别
2019/05/30 Javascript
微信分享invalid signature签名错误踩过的坑
2020/04/11 Javascript
微信小程序基于ColorUI构建皮皮虾短视频去水印组件
2020/11/04 Javascript
python将unicode转为str的方法
2017/06/21 Python
Python中进程和线程的区别详解
2017/10/29 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
python3.6使用pickle序列化class的方法
2018/10/22 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
2018/12/10 Python
Python面向对象之类的定义与继承用法示例
2019/01/14 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
CSS3中的@keyframes关键帧动画的选择器绑定
2016/06/13 HTML / CSS
彪马加拿大官网:PUMA加拿大
2018/10/04 全球购物
Java基础知识面试要点
2016/07/29 面试题
五分钟演讲稿
2014/04/30 职场文书
投标承诺书怎么写
2014/05/24 职场文书
离职证明范本(5篇)
2014/09/19 职场文书
求职自我评价怎么写
2015/03/09 职场文书
2015年基层党建工作汇报材料
2015/06/25 职场文书
2015年初中教师个人工作总结
2015/07/21 职场文书
python通过opencv调用摄像头操作实例分析
2021/06/07 Python
jackson json序列化实现首字母大写,第二个字母需小写
2021/06/29 Java/Android
Go 语言结构实例分析
2021/07/04 Golang
golang生成vcf通讯录格式文件详情
2022/03/25 Golang
Redis实战高并发之扣减库存项目
2022/04/14 Redis