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


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 写类方式之三
Jul 05 Javascript
jQuery 实现侧边浮动导航菜单效果
Dec 26 Javascript
jQuery实现元素拖拽并cookie保存顺序的方法
Feb 20 Javascript
当jquery ajax遇上401请求的解决方法
May 19 Javascript
浅谈$_FILES数组为空的原因
Feb 16 Javascript
JQuery 进入页面默认给已赋值的复选框打钩
Mar 23 jQuery
Javascript 一些需要注意的细节(必看篇)
Jul 08 Javascript
ionic2懒加载配置详解
Sep 01 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
Apr 26 Javascript
vue-cli3单页构建大型项目方案
Apr 07 Javascript
JS实现拖拽元素时与另一元素碰撞检测
Aug 27 Javascript
梳理一下vue中的生命周期
Dec 30 Vue.js
微信小程序实现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数据库配置文件一般做法分享
2012/07/07 PHP
两级联动select刷新后其值保持不变的实现方法
2014/01/27 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
为jquery.ui.dialog 增加“自动记住关闭时的位置”的功能
2009/11/24 Javascript
js word表格动态添加代码
2010/06/07 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
2015/12/20 Javascript
需要牢记的JavaScript基础知识
2016/09/25 Javascript
Bootstrap列表组学习使用
2017/02/09 Javascript
解决option标签selected=&quot;selected&quot;属性失效的问题
2017/11/06 Javascript
js中arguments对象的深入理解
2019/05/14 Javascript
深入了解query和params的使用区别
2019/06/24 Javascript
Vue.js路由实现选项卡简单实例
2019/07/24 Javascript
微信小程序实现写入读取缓存详解
2019/08/30 Javascript
python中lambda与def用法对比实例分析
2015/04/30 Python
Python执行时间的计算方法小结
2017/03/17 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
2018/04/17 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
2018/12/24 Python
Python 中list ,set,dict的大规模查找效率对比详解
2019/10/11 Python
Django中FilePathField字段的用法
2020/05/21 Python
Python 解决相对路径问题:&quot;No such file or directory&quot;
2020/06/05 Python
分享一个H5原生form表单的checkbox特效代码
2018/02/26 HTML / CSS
Tarte Cosmetics官网:美国最受欢迎的化妆品公司之一
2017/08/24 全球购物
加拿大当代时尚服饰、配饰和鞋类专业零售商和制造商:LE CHÂTEAU
2017/10/06 全球购物
澳大利亚女性快速时尚零售商:Ally Fashion
2018/04/25 全球购物
咖啡书吧创业计划书
2014/01/13 职场文书
给领导的致歉信范文
2014/01/13 职场文书
经贸韩语专业大学生职业规划
2014/02/14 职场文书
机关单位人员学雷锋心得体会
2014/03/10 职场文书
《李时珍夜宿古寺》教学反思
2014/04/09 职场文书
教师党员自我剖析材料
2014/09/29 职场文书
北大自主招生自荐信
2015/03/04 职场文书
2015年度物业公司工作总结
2015/04/27 职场文书
小学工作总结2015
2015/05/04 职场文书
浅谈Mysql多表连接查询的执行细节
2021/04/24 MySQL
深入探讨opencv图像矫正算法实战
2021/05/21 Python
pytorch fine-tune 预训练的模型操作
2021/06/03 Python