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


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 相关文章推荐
JSP跨iframe如何传递参数实现代码
Sep 21 Javascript
jQuery ajax dataType值为text json探索分享
Sep 23 Javascript
js处理表格对table进行修饰
May 26 Javascript
angularjs客户端实现压缩图片文件并上传实例
Jul 06 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
Dec 03 Javascript
利用js来实现缩略语列表、文献来源链接和快捷键列表
Dec 16 Javascript
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
Aug 23 jQuery
JS删除数组里的某个元素方法
Feb 03 Javascript
详解JS函数stack size计算方法
Jun 18 Javascript
VUE-cli3使用 svg-sprite-loader
Oct 20 Javascript
JS异步错误捕获的一些事小结
Apr 26 Javascript
Ant Design moment对象和字符串之间的相互转化教程
Oct 27 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
Laravel实现表单提交
2017/05/07 PHP
Thinkphp 框架扩展之数据库驱动常用方法小结
2020/04/23 PHP
PHP Pipeline 实现中间件的示例代码
2020/04/26 PHP
各种常用浏览器getBoundingClientRect的解析
2009/05/21 Javascript
关于include标签导致js路径找不到的问题分析及解决
2013/07/09 Javascript
Ajax请求在数据量大的时候出现超时的解决方法
2014/02/27 Javascript
推荐10个2014年最佳的jQuery视频插件
2014/11/12 Javascript
nodejs URL模块操作URL相关方法介绍
2015/03/03 NodeJs
JavaScript处理解析JSON数据过程详解
2015/09/11 Javascript
设计模式中的组合模式在JavaScript程序构建中的使用
2016/05/18 Javascript
ionic 上拉菜单(ActionSheet)实例代码
2016/06/06 Javascript
完美JQuery图片切换效果的简单实现
2016/07/21 Javascript
设置jquery UI 控件的大小方法
2016/12/12 Javascript
原生js开发的日历插件
2017/02/04 Javascript
canvas绘制环形进度条
2017/02/23 Javascript
解决vue axios的封装 请求状态的错误提示问题
2018/09/25 Javascript
微信小程序实现的点击按钮 弹出底部上拉菜单功能示例
2018/12/20 Javascript
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
2020/02/19 Javascript
element跨分页操作选择详解
2020/06/29 Javascript
简单介绍Python下自己编写web框架的一些要点
2015/04/29 Python
Python HTTP客户端自定义Cookie实现实例
2017/04/28 Python
解决pycharm界面不能显示中文的问题
2018/05/23 Python
Python人工智能之路 之PyAudio 实现录音 自动化交互实现问答
2019/08/13 Python
Python实现AES加密,解密的两种方法
2020/10/03 Python
使用css实现android系统的loading加载动画
2019/07/25 HTML / CSS
英国玛莎百货澳大利亚:Marks & Spencer Australia
2019/08/30 全球购物
美国鲜花递送:UrbanStems
2021/01/04 全球购物
北承题目(C++)
2012/05/16 面试题
促销活动方案模板
2014/02/24 职场文书
精神文明建设先进工作者事迹材料
2014/05/02 职场文书
四风对照检查材料范文
2014/09/27 职场文书
项目经理助理岗位职责
2015/04/13 职场文书
2016年小学生清明节广播稿
2015/12/17 职场文书
2016创先争优活动党员公开承诺书
2016/03/24 职场文书
解决Mysql多行子查询的使用及空值问题
2022/01/22 MySQL
使用CSS实现音波加载效果
2023/05/07 HTML / CSS