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


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 设置某DIV区域内的checkbox复选框
Nov 30 Javascript
js 替换功能函数,用正则表达式解决,js的全部替换
Dec 08 Javascript
jquery中ready()函数执行的时机和window的load事件比较
Jun 22 Javascript
node.js读取文件到字符串的方法
Jun 29 Javascript
CSS javascript 结合实现悬浮固定菜单效果
Aug 23 Javascript
js+css简单实现网页换肤效果
Dec 29 Javascript
js模拟支付宝密码输入框
Apr 11 Javascript
addEventListener()与removeEventListener()解析
Apr 20 Javascript
Vue注册组件命名时不能用大写的原因浅析
Apr 25 Javascript
使用layui实现树形结构的方法
Sep 20 Javascript
LayUi数据表格自定义赋值方式
Oct 26 Javascript
uniapp,微信小程序中使用 MQTT的问题
Jul 11 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中遍历二维数组的几种方法详解
2013/06/08 PHP
安装ImageMagick出现error while loading shared libraries的解决方法
2014/09/23 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
PHP实现RTX发送消息提醒的实例代码
2017/01/03 PHP
基于PHP实现的多元线性回归模拟曲线算法
2018/01/30 PHP
Linux下 php7安装redis的方法
2018/11/01 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
JavaScript 高级语法介绍
2009/06/15 Javascript
jquery图片不完全按比例自动缩小的简单代码
2013/07/29 Javascript
JavaScript测试工具之Karma-Jasmine的安装和使用详解
2015/12/03 Javascript
原生js实现数字字母混合验证码的简单实例
2015/12/10 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
2016/03/07 Javascript
Bootstrap每天必学之附加导航(Affix)插件
2016/04/25 Javascript
对js中回调函数的一些看法
2016/08/29 Javascript
使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo
2016/09/01 Javascript
js两种拼接字符串的简单方法(必看)
2016/09/02 Javascript
ES6教程之for循环和Map,Set用法分析
2017/04/10 Javascript
从零开始学习Node.js系列教程之设置HTTP头的方法示例
2017/04/13 Javascript
React性能优化系列之减少props改变的实现方法
2019/01/17 Javascript
微信公众平台获取access_token的方法步骤
2019/03/29 Javascript
在Python中操作字典之update()方法的使用
2015/05/22 Python
利用Python自动监控网站并发送邮件告警的方法
2016/08/24 Python
python字符串,数值计算
2016/10/05 Python
学习Python3 Dlib19.7进行人脸面部识别
2018/01/24 Python
python实现SOM算法
2018/02/23 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
Python Flask框架实现简单加法工具过程解析
2020/06/03 Python
Python 如何实现访问者模式
2020/07/28 Python
python实现扫雷游戏的示例
2020/10/20 Python
CSS3中几个新增加的盒模型属性使用教程
2016/03/01 HTML / CSS
美国唇部护理专家:Sara Happ
2019/06/19 全球购物
2015年推普周活动总结
2015/03/27 职场文书
感恩老师主题班会
2015/08/12 职场文书
如何起草一份正确的合伙创业协议书?
2019/07/04 职场文书
python 实现mysql自动增删分区的方法
2021/04/01 Python
windows安装 redis 6.2.6最新步骤详解
2022/04/26 Redis