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


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 必知必会之closure
Sep 21 Javascript
IE6 fixed的完美解决方案
Mar 31 Javascript
正则表达式搭配js轻松处理json文本方便而老古
Feb 17 Javascript
js实现表格字段排序
Feb 19 Javascript
jQuery中element选择器用法实例
Dec 29 Javascript
利用jQuery实现漂亮的圆形进度条倒计时插件
Sep 30 Javascript
js图片轮播手动切换效果
Nov 10 Javascript
JavaScrip常见的一些算法总结
Dec 28 Javascript
纯js代码制作的网页时钟特效【附实例】
Mar 30 Javascript
详细谈谈AngularJS的子级作用域问题
Sep 05 Javascript
使用ef6创建oracle数据库的实体模型遇到的问题及解决方案
Nov 09 Javascript
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
Nov 22 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中进行身份认证
2006/10/09 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
2013/06/17 PHP
Yii 快速,安全,专业的PHP框架
2014/09/03 PHP
多个iframe自动调整大小的问题
2006/09/18 Javascript
让浏览器非阻塞加载javascript的几种方法小结
2011/04/25 Javascript
JS实现往下不断流动网页背景的方法
2015/02/27 Javascript
javascript中数组和字符串的方法对比
2016/07/20 Javascript
JS访问DOM节点方法详解
2016/11/29 Javascript
ES6新特性之模块Module用法详解
2017/04/01 Javascript
jQuery用noConflict代替$的实现方法
2017/04/12 jQuery
vuejs实现本地数据的筛选分页功能思路详解
2017/11/15 Javascript
vue中设置height:100%无效的问题及解决方法
2018/07/27 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
2018/11/29 Javascript
详解js获取video任意时间的画面截图
2019/04/17 Javascript
微信小程序封装自定义弹窗的实现代码
2019/05/08 Javascript
微信小程序实现蓝牙打印
2019/09/23 Javascript
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
Python程序语言快速上手教程
2012/07/18 Python
python不带重复的全排列代码
2013/08/13 Python
wxPython窗口中文乱码解决方法
2014/10/11 Python
Python探索之SocketServer详解
2017/10/28 Python
django将数组传递给前台模板的方法
2019/08/06 Python
利用pyecharts实现地图可视化的例子
2019/08/12 Python
python 初始化一个定长的数组实例
2019/12/02 Python
5个你不知道的HTML5的接口介绍
2013/08/07 HTML / CSS
英国露营设备和户外服装购物网站:Simply Hike
2019/05/05 全球购物
2013年员工自我评价范文
2013/12/27 职场文书
车队司机个人自我鉴定
2014/04/17 职场文书
会计学自荐信
2014/06/03 职场文书
党员创先争优心得体会
2014/09/11 职场文书
2014年党小组工作总结
2014/12/20 职场文书
房屋认购协议书
2015/01/29 职场文书
售后前台接待岗位职责
2015/04/03 职场文书
告诉你一个秘密:富人致富的五大优点
2019/07/11 职场文书
详解MySQL连接挂死的原因
2021/05/18 MySQL
Python first-order-model实现让照片动起来
2022/06/25 Python