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


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中Get和Set访问器的实现代码
Sep 19 Javascript
js确定对象类型方法
Mar 30 Javascript
jquery实现弹出层完美居中效果
Mar 03 Javascript
HTML页面弹出居中可拖拽的自定义窗口层
May 07 Javascript
javascript与css3动画结合使用小结
Mar 11 Javascript
javascript每日必学之循环
Feb 19 Javascript
vue组件如何被其他项目引用
Apr 13 Javascript
纯js实现图片匀速淡入淡出效果
Aug 22 Javascript
JavaScript实现的斑马线表格效果【隔行变色】
Sep 18 Javascript
对类Vue的MVVM前端库的实现代码
Sep 07 Javascript
mpvue中使用flyjs全局拦截的实现代码
Sep 13 Javascript
json前后端数据交互相关代码
Sep 19 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
全国FM电台频率大全 - 17 湖北省
2020/03/11 无线电
php 无限级数据JSON格式及JS解析
2010/07/17 PHP
php实现简易聊天室应用代码
2015/09/23 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
2016/07/13 PHP
laravel中的错误与日志用法详解
2016/07/26 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
2017/02/10 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
2017/08/03 PHP
Js中sort()方法的用法
2006/11/04 Javascript
用Javascript实现锚点(Anchor)间平滑跳转
2009/09/08 Javascript
JavaScript实现拼音排序的方法
2012/11/20 Javascript
JavaScript中操作Mysql数据库实例
2015/04/02 Javascript
JS实现当前页居中分页效果的方法
2015/06/18 Javascript
JavaScript代码实现图片循环滚动效果
2020/03/19 Javascript
Knockout结合Bootstrap创建动态UI实现产品列表管理
2016/09/14 Javascript
jQuery动态生成Bootstrap表格
2016/11/01 Javascript
JQuery中Ajax的操作完整例子
2017/03/07 Javascript
详解如何在NodeJS项目中优雅的使用ES6
2017/04/22 NodeJs
详解webpack2异步加载套路
2018/09/14 Javascript
获取Django项目的全部url方法详解
2017/10/26 Python
Python3实现发送QQ邮件功能(html)
2017/12/15 Python
python3解析库BeautifulSoup4的安装配置与基本用法
2018/06/26 Python
Python 占位符的使用方法详解
2019/07/10 Python
python 消除 futureWarning问题的解决
2019/12/25 Python
Django使用rest_framework写出API
2020/05/21 Python
在python下实现word2vec词向量训练与加载实例
2020/06/09 Python
HTML5中drawImage用法分析
2014/12/01 HTML / CSS
英国玛莎百货新西兰:Marks & Spencer New Zealand
2019/07/21 全球购物
俄罗斯隐形眼镜和眼镜在线商店:Cronos
2020/06/02 全球购物
后勤园长自我鉴定
2013/10/17 职场文书
工商企业管理应届生求职信
2013/11/03 职场文书
公共机构节能宣传周活动总结
2014/07/09 职场文书
检察机关个人对照检查材料
2014/09/15 职场文书
会计电算化实训报告
2014/11/04 职场文书
社区志愿服务活动感想
2015/08/07 职场文书
自愿离婚协议书范本2016
2016/03/18 职场文书
详解Python requests模块
2021/06/21 Python