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


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 学习笔记一些小技巧
Mar 28 Javascript
JQuery 自定义CircleAnimation,Animate方法学习笔记
Jul 10 Javascript
加载远程图片时,经常因为缓存而得不到更新的解决方法(分享)
Jun 26 Javascript
JS小游戏之象棋暗棋源码详解
Sep 25 Javascript
打造个性化的功能强大的Jquery虚拟键盘(VirtualKeyboard)
Oct 11 Javascript
js实现滑动到页面底部自动加载更多功能
Feb 15 Javascript
使用jquery的jsonp如何发起跨域请求及其原理详解
Aug 17 jQuery
Vue-Router实现组件间跳转的三种方法
Nov 07 Javascript
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
Dec 29 Javascript
vue之将echart封装为组件
Jun 02 Javascript
图文讲解vue的v-if使用方法
Feb 11 Javascript
解决vue自定义指令导致的内存泄漏问题
Aug 04 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中ob(Output Buffer 输出缓冲)函数使用方法
2007/07/21 PHP
php生成缩略图填充白边(等比缩略图方案)
2013/12/25 PHP
php基于单例模式封装mysql类完整实例
2016/10/18 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
2019/02/15 PHP
jquery中ajax学习笔记4
2011/10/16 Javascript
jQuery中jqGrid分页实现代码
2011/11/04 Javascript
JavaScript实现拼音排序的方法
2012/11/20 Javascript
js对图片base64编码字符串进行解码并输出图像示例
2014/03/17 Javascript
js实现精确到毫秒的倒计时效果
2016/08/05 Javascript
Javascript中arguments对象的详解与使用方法
2016/10/04 Javascript
浅谈jQuery绑定事件会叠加的解决方法和心得总结
2016/10/26 Javascript
解析Angular 2+ 样式绑定方式
2018/01/15 Javascript
webpack 插件html-webpack-plugin的具体使用
2018/04/09 Javascript
用图片替换checkbox原始样式并实现同样的功能
2018/11/15 Javascript
详解vue项目接入微信JSSDK的坑
2018/12/14 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
Vue实现根据hash高亮选项卡
2019/05/27 Javascript
JavaScript实现图片伪异步上传过程解析
2020/04/10 Javascript
5个你不知道的JavaScript字符串处理库(小结)
2020/06/01 Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
2020/07/17 Javascript
Python读取Json字典写入Excel表格的方法
2018/01/03 Python
Python简单实现控制电脑的方法
2018/01/22 Python
查看django执行的sql语句及消耗时间的两种方法
2018/05/29 Python
python实现简易动态时钟
2018/11/19 Python
基于python全局设置id 自动化测试元素定位过程解析
2019/09/04 Python
python处理RSTP视频流过程解析
2020/01/11 Python
Python 写了个新型冠状病毒疫情传播模拟程序
2020/02/14 Python
HTML 5 input placeholder 属性如何完美兼任ie
2014/05/12 HTML / CSS
Application Cache未缓存文件无法访问无法加载问题
2014/05/31 HTML / CSS
阿迪达斯比利时官方商城:adidas比利时
2016/10/10 全球购物
2014年三万活动总结
2014/04/26 职场文书
个人授权委托书样本
2014/09/13 职场文书
大学生职业生涯十年规划书范文
2014/09/17 职场文书
2014年自愿离婚协议书
2014/10/10 职场文书
Ajax是什么?Ajax高级用法之Axios技术
2021/04/21 Javascript
三星 3nm 芯片将于第二季度开始量产
2022/04/29 数码科技