小程序video组件使用

2,371 阅读1分钟

最近做小程序需要用到视频播放功能,在原来的列表里面每条可能会有视频,由于在多个地方都有用到  所以做成了组件。本以为比较简单,却花了一天的时间,原因是以下几点,希望大家也注意下

1、创建video上下文

wx.createVideoContext('video'+index,this);

如果你是做成了组件的话,创建的时候一定要加上this,跟使用canvas一样,我就因为没有this,结果所有的方法都用不了。后面在非组件中使用可,才发现是组件里面需要传this;

第一个参数是video的id

2、createVideoContext暂时没有提供销毁方法,所以每次调用他的时候都会增加一个videoContext,调用很多次之后会出现如下的报错,为了避免重复创建,需将已创建好的videoContext存起来,后面需要调用play pause stop方法的时候就不用再创建了

possible eventEmitter memory leak detected %d listeners added. 
Use emitter.setMaxListeners() to increase limit

//获取参数
getParameters(event,param){
  return event.currentTarget.dataset[param];
},
videoPlay(event){
  let index = this.getParameters(event,'index');
  //有进行中的音频先停止
  if (this.data.prePlayIndex!=-1) {
    this.getVideoContextList(this.data.prePlayIndex).pause();
  }
  this.setPlayVideoIndex(index);
  this.getVideoContextList(index).play();
},
//记录正在播放的视频索引
setPlayVideoIndex(index){
  this.setData({
    prePlayIndex:index
  })
},
//暂停播放当前音频
pausePlay(event){
  let index = this.getParameters(event,'index');
  if(this.data.prePlayIndex==index){
    this.getVideoContextList(this.data.prePlayIndex).pause();
    this.setPlayVideoIndex(-1);
  }},
setVideoContextList(index){
  this.videoList=this.videoList||{};
  if(this.videoList['video_'+index]==undefined){
    this.videoList['video_'+index]=wx.createVideoContext('video' + index,this);
  }},
getVideoContextList(index){
  this.setVideoContextList(index);
  return this.videoList['video_'+index];
}