微信小程序实现自定义音频播放

最近开发小程序,发现ios设备用audio原生标签播放不了,后面想了很多办法还是不得行,最后只有自定义一个播放组件。

一、HTML部分
<div
      :key="file.id"
      class="ew-upload-audio"
      @tap="onPlayAudio(file)">
      <div class="ew-upload-audio-file" :class="{'playing': file.playing}"></div>
  </div>
二、JS部分
export default {
    props: {
      file: {
        type: Object
      }
    },
    data() {
      return {
        isPlaying:false,
        playingFile:{},
        innerAudioContext:null
      }
    },
    onUnload() { //卸载页面的时候暂停音频播放以及销毁音频对象
      if(this.innerAudioContext){
        this.innerAudioContext.stop();
        this.innerAudioContext.destroy();
      }
    },
    onHide: function () { //从当前页面跳转到其他页面或者手机息屏暂停音频播放以及状态还原
      if(this.innerAudioContext){
        this.innerAudioContext.stop();
        this.$set(this.playingFile, 'playing', false);
      }
    },
    methods: {
      onPlayAudio(file) {
        if (!this.innerAudioContext) {
          this.innerAudioContext = wx.createInnerAudioContext();//创建内部 audio 上下文 InnerAudioContext 对象
          this.innerAudioContext.onPlay(() => {
            // console.log('开始播放');
            this.$set(this.playingFile, 'playing', true);
          });
          this.innerAudioContext.onStop(() => {
            // console.log('停止播放');
            this.$set(this.playingFile, 'playing', false);
          });
          this.innerAudioContext.onEnded(() => {
            // console.log('播放结束');
            this.$set(this.playingFile, 'playing', false);
          });
          this.innerAudioContext.onError((res) => {
            // console.log(res.errMsg);
            // console.log(res.errCode);
          })
        }
        this.playingFile = file;
        if (this.playingFile.playing) {
          this.innerAudioContext.stop();
        } else {
          this.innerAudioContext.src = file.url;
          this.innerAudioContext.play();
        }
      }
    },
  };
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值