微信小程序> 小程序接口实现点击当前video,暂停页面其它video

小程序接口实现点击当前video,暂停页面其它video

浏览量:2860 时间: 来源:pspxuan

1.开发过程

1.1.使用接口

今日开发小程序时,需要点击当前video播放,其它video暂停。
下面来记录一下
首先我先在小程序开发文档中找了对应的 API , 找了半天发现了这个
小程序下面也附上了此API获取实例中的一些方法
小程序
上面的实例的方法没有全部列出,大家可以到 小程序文档 中查看。
小程序有很多的接口,说明其实并不那么详细,所以说找接口时也浪费了很多时间。

附上代码
wxml代码:

<block wx:for='{{video}}'>   <video id='{{item.id}}' bindplay="{{'play'+item.id}}" src='{{item.url}}' poster='{{item.fm_logo}}' enable-progress-gesture='true'></video> </block> //这里遍历的视频有 4 个。简化了一下代码,看的更清楚些。

js 代码:

onReady: function (res) {    this.videoContext1 = wx.createVideoContext('1')       this.videoContext2 = wx.createVideoContext('2')    this.videoContext3 = wx.createVideoContext('3')    this.videoContext4 = wx.createVideoContext('4')    //创建wx.createVideoContext对象,有四个视频所以创建四个对象来控制视频  },  //控制除了点击之外的视频停止播放  //stop() 为 API 创建的对象中的方法  play1: function(enl){    this.videoContext2.stop()    this.videoContext3.stop()    this.videoContext4.stop()   },  play2: function (enl) {    this.videoContext1.stop()    this.videoContext3.stop()    this.videoContext4.stop()  },  play3: function (enl) {    this.videoContext2.stop()    this.videoContext1.stop()    this.videoContext4.stop()  },  play4: function (enl) {    this.videoContext2.stop()    this.videoContext3.stop()    this.videoContext1.stop()  }

到这里功能就已经实现了,但是事情还没完,真写成这样就太辣鸡了。
因为视频是后台数据传过来的,所以页面中可能不会只有4个视频,要是传过来10个视频怎么办呢,所以说我们要根据视频的数量来动态的实现这个功能。
于是开始重构代码

1.2.重构代码

html代码:

<block wx:for='{{video}}'>   <video id='{{item.id}}' bindplay="play" src='{{item.url}}' poster='{{item.fm_logo}}' enable-progress-gesture='true'></video> </block> //修改了bindplay,不再定义四个事件函数

js代码:
1.数据请求时遍历接口

onLoad: function(options) {    var i = this    app.util.request({      url: "entry/wxapp/refuse",      success: function(t) {        i.setData({          video: t.data.video,            //获取video数据          num: t.data.video.length       //获取视频数量        })        var num = t.data.video.length     //获取视频数量        for(var a = 1;a <= num; a++){          i[`videoContext${a}`] = wx.createVideoContext(`${a}`)          //渲染创建wx.createVideoContext对象        }      }    })  },  play: function(enl){  var nums = this.__data__.num     //获取后台传入的视频数量,此处在不同开发版本可能会有一点差异,需要自行调试  var id = enl.currentTarget.id    //获取每次点击的视频id    for(var a = 1; a <= nums; a++){      if (a != id) { this[`videoContext${a}`].stop() }       //实现除点击外的video暂停    }},

写到这里,就可以实现我们的功能了。

1.3.注意

着重说一下上文渲染API的代码

for(var a = 1;a <= num; a++){          i[`videoContext${a}`] = wx.createVideoContext(`${a}`)        }// i.videoContext1 = wx.createVideoContext('1')   // i.videoContext2 = wx.createVideoContext('2')// i.videoContext3 = wx.createVideoContext('3')// i.videoContext4 = wx.createVideoContext('4')i[`videoContext${a}`] = wx.createVideoContext('' + a + '') // 正确i[`videoContext${a}`] = wx.createVideoContext(`${a}`)  // 正确i[`videoContext${a}`] = wx.createVideoContext('`${a}`')    // 错误i[`videoContext${a}`] = wx.createVideoContext("'" + a + "'") // 错误i.`videoContext${a}` = wx.createVideoContext('' + a + '')  // 错误i.videoContext`${a}` = wx.createVideoContext('' + a + '')  // 错误

此处用到了ES6模板字符串以及对象的属性名表达式,也是之前的基础打的不够牢固,以至于这里卡了很久

2.总结

2.1.wx.createVideoContext( )

  1. 此接口可以创建video的上下文对象,VideoContext 通过 id 跟一个 video 组件绑定,操作对应的 video 组件。
videoContext = wx.createVideoContext('id')
  1. 两个参数
    第一个参数:组件的 id(必填)
    第二个参数:在自定义组件情况下,当前组件实例的this,以操作组件内 video 组件

  2. 返回值
    返回一个 VideoContext 对象

  3. 方法
    见小程序文档

2.2.实现思路

  1. 定义 API 对象,绑定组件 id
  2. 定义事件函数获取 API 对象的 方法
  3. video 组件绑定 bindplay 事件
  4. 实现功能后,重构代码。
小程序

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎