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