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


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 相关文章推荐
求得div 下 img的src地址的js代码
Feb 28 Javascript
JavaScript实现页面滚动图片加载(仿lazyload效果)
Jul 22 Javascript
表单序列化与jq中的serialize使用示例
Feb 21 Javascript
node.js中的favicon.ico请求问题处理
Dec 15 Javascript
jQuery实现可以编辑的表格实例详解【附demo源码下载】
Jul 09 Javascript
JavaScript实现图片轮播组件代码示例
Nov 22 Javascript
Javascript 判断两个IP是否在同一网段实例代码
Nov 28 Javascript
JavaScript之浏览器对象_动力节点Java学院整理
Jul 03 Javascript
js实现音乐播放控制条
Sep 09 Javascript
解决layer.prompt无效的问题
Sep 24 Javascript
ES6函数和数组用法实例分析
May 23 Javascript
antd vue 刷新保留当前页面路由,保留选中菜单,保留menu选中操作
Aug 06 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下读取文本文件的代码
2008/07/02 PHP
PHP 数组遍历方法大全(foreach,list,each)
2010/06/30 PHP
php生成数组的使用示例 php全组合算法
2014/01/16 PHP
php提交过来的数据生成为txt文件
2016/04/28 PHP
JS 获取span标签中的值的代码 支持ie与firefox
2009/08/24 Javascript
JavaScript获取文本框内选中文本的方法
2015/02/20 Javascript
Jquery常用的方法汇总
2015/09/01 Javascript
jQuery中的ajax async同步和异步详解
2015/09/29 Javascript
基于OL2实现百度地图ABCD marker的效果
2015/10/01 Javascript
基于JavaScript操作DOM常用的API小结
2015/12/01 Javascript
关于JavaScript作用域你想知道的一切
2016/02/04 Javascript
Javascript中的prototype与继承
2017/02/06 Javascript
ie下js不执行的几种可能
2017/02/28 Javascript
js模块加载方式浅析
2017/08/12 Javascript
vue 封装自定义组件之tabal列表编辑单元格组件实例代码
2017/09/07 Javascript
redux-saga 初识和使用
2018/03/10 Javascript
详解JS实现系统登录页的登录和验证
2019/04/29 Javascript
如何搭建一个完整的Vue3.0+ts的项目步骤
2020/10/18 Javascript
tensorflow没有output结点,存储成pb文件的例子
2020/01/04 Python
pytorch实现建立自己的数据集(以mnist为例)
2020/01/18 Python
将pytorch转成longtensor的简单方法
2020/02/18 Python
浅谈Python里面None True False之间的区别
2020/07/09 Python
Django model重写save方法及update踩坑详解
2020/07/27 Python
python开根号实例讲解
2020/08/30 Python
Manjaro、pip、conda更换国内源的方法
2020/11/17 Python
美国NBA官方商店:NBA Store
2019/04/12 全球购物
上班玩游戏检讨书
2014/02/07 职场文书
安全演讲稿大全
2014/05/09 职场文书
质量月口号
2014/06/20 职场文书
2014年化工厂工作总结
2014/11/25 职场文书
培训师岗位职责
2015/02/14 职场文书
独生子女证明范本
2015/06/19 职场文书
校长新学期致辞
2015/07/30 职场文书
React配置子路由的实现
2021/06/03 Javascript
linux下安装redis图文详细步骤
2021/12/04 Redis
浅析python中特殊文件和特殊函数
2022/02/24 Python