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


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 相关文章推荐
passwordStrength 基于jquery的密码强度检测代码使用介绍
Oct 08 Javascript
使用jquery animate创建平滑滚动效果(可以是到顶部、到底部或指定地方)
May 27 Javascript
删除条目时弹出的确认对话框
Jun 05 Javascript
Javascript继承机制详解
May 30 Javascript
jquery仿京东商品放大浏览页面
Jun 06 jQuery
JavaScript使用prototype原型实现的封装继承多态示例
Aug 31 Javascript
Makefile/cmake/node-gyp中区分判断不同平台的方法
Dec 18 Javascript
node之本地服务器图片上传的方法示例
Mar 26 Javascript
Vue中jsx不完全应用指南小结
Nov 01 Javascript
vue使用prop可以渲染但是打印台报错的解决方式
Nov 13 Javascript
angular异步验证防抖踩坑实录
Dec 01 Javascript
微信小程序canvas开发水果老虎机的思路详解
Feb 07 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
收音机术语解释
2021/03/01 无线电
PHP的PDO常用类库实例分析
2016/04/07 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
2019/09/30 PHP
PHP大文件及断点续传下载实现代码
2020/08/18 PHP
PHP 实现链式操作
2021/03/09 PHP
脚本吧 - 幻宇工作室用到js,超强推荐share.js
2006/12/23 Javascript
List Installed Hot Fixes
2007/06/12 Javascript
jQuery 性能优化指南(3)
2009/05/21 Javascript
3种不同方式的焦点图轮播特效分享
2013/10/30 Javascript
JS 实现列表与多选框选择附预览动画
2014/10/29 Javascript
jquery使用hide方法隐藏指定id的元素
2015/03/30 Javascript
jquery实现的缩略图预览滑块实例
2015/06/25 Javascript
canvas时钟效果
2017/02/16 Javascript
删除table表格行的实例讲解
2017/09/21 Javascript
Node.js 使用axios读写influxDB的方法示例
2018/10/26 Javascript
node 标准输入流和输出流代码实例
2019/09/19 Javascript
vue+axios实现post文件下载
2019/09/25 Javascript
Vue项目中使用jsonp抓取跨域数据的方法
2019/11/10 Javascript
[19:54]夜魇凡尔赛茶话会 第一期02:看图识人
2021/03/11 DOTA
Python内建函数之raw_input()与input()代码解析
2017/10/26 Python
利用Python复制文件的9种方法总结
2019/09/02 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
2020/05/13 Python
乐高积木玩具美国官网:LEGO Shop US
2016/09/16 全球购物
Calzedonia美国官网:意大利风格袜子、打底裤和沙滩装
2018/07/19 全球购物
英国天然宝石首饰购买网站:Gemondo Jewellery
2018/10/23 全球购物
德国排名第一的主题公园门票网站:Attraction Tickets Direct
2019/09/09 全球购物
.NET面试题:什么是反射
2016/09/30 面试题
学生打架检讨书
2014/02/14 职场文书
人民调解员先进事迹材料
2014/05/08 职场文书
解放思想大讨论活动心得体会
2014/09/11 职场文书
创先争优个人总结
2015/03/04 职场文书
一个独生女的故事观后感
2015/06/04 职场文书
旗帜观后感
2015/06/08 职场文书
Python机器学习应用之基于线性判别模型的分类篇详解
2022/01/18 Python
不同品牌、不同型号对讲机如何互相通联
2022/02/18 无线电
漫画《催眠麦克风-Dawn Of Divisions》第二卷PV公开
2022/04/05 日漫