关于UNIAPP的uni.getBackgroundAudioManager()更换src会叠加事件的解决办法

1.封装成JS

util.js

let audioContext=null;
let canPlayCallback=null;
let endedCallback=null;
let timeUpdateCallback=null;
let onPauseCallback=null;

const onTimeUpdate=function(e){
  timeUpdateCallback = e
}

const onCanplay=function(e){
  canPlayCallback = e
}

const onPause=function(e){
  onPauseCallback = e
}

const onEnded=function(e){
  endedCallback = e
}

// 解决音频叠加问题 https://ask.dcloud.net.cn/question/133610
const initContext=function(){
  if (audioContext!=null) {
    return audioContext;
  }
  audioContext = uni.getBackgroundAudioManager();
  audioContext.onTimeUpdate((e) => {
    if (timeUpdateCallback!=null) {
      timeUpdateCallback();
    }
  });
  audioContext.onCanplay((e) => {
    if (canPlayCallback!=null) {
      canPlayCallback();
    }
  });
  audioContext.onPause((e) => {
    if (onPauseCallback!=null) {
      onPauseCallback();
    }
  });
  audioContext.onEnded((e) => {
    if (endedCallback!=null) {
      endedCallback();
    }
  });
  return audioContext;
}

module.exports={
  initContext,
  onTimeUpdate,
  onCanplay,
  onPause,
  onEnded
}

 

2.使用

main.js 里面挂载

import util from "@/utils/util.js"

Vue.prototype.$util=util;

 

index.vue 使用

this.audioInfo=this.$util.initContext()

this.audioInfo.onTimeUpdate((e)=>{

})

posted @ 2022-03-24 20:11  AzusaX  阅读(718)  评论(0)    收藏  举报