• 关于 Vue 微信客户端 不能播放音乐(报错和不能播放的问题)


    前言

    用vue 做音乐播放的时候,在本地可以打开播放,但在微信里面不能播放音乐

    所以这样解决

      // 音乐播放
        audioPlay(){
          let _this = this;
          var audio = _this.music;
          if(_this.bgmUrl){
            audio.src = _this.bgmUrl;
            //audio.play();
            _this.esPlayMusic();
            _this.timeupdate();
            wx.ready(()=>{
            })
            typeof WeixinJSBridge !== 'undefined' && WeixinJSBridge.invoke('getNetworkType', {}, function (res) {
              //audio.play();
              _this.esPlayMusic();
              _this.timeupdate();
           });
          }
        },
        timeupdate() {
          let _this = this;
          var audio = _this.music;
            audio.addEventListener("timeupdate", function() {
                var duration = this.duration;
                var currentTime = this.currentTime;
                var percentage = (currentTime / duration) * 100;
                if (percentage == 100) {
                  _this.audioPlay();
                    typeof WeixinJSBridge !== 'undefined' && WeixinJSBridge.invoke('getNetworkType', {}, function (res) {
                  _this.audioPlay();
                   });
                }
            })
        },

    主要是这段代码

     typeof WeixinJSBridge !== 'undefined' && WeixinJSBridge.invoke('getNetworkType', {}, function (res) {
              //audio.play();
              _this.esPlayMusic();
              _this.timeupdate();
           });

    后来又因为   点击过快 出现报错了

    The play() request was interrupted by a call to pause()

    因为上一个用户的播报还没结束,这一个播报就要覆盖上来了,所以需要异步处理下

    上代码了

    // 异步加载音乐播放
        esPlayMusic(){
          let _this = this;
          //let audio = document.getElementById("audioPlay");
          var audio = _this.music;
          //audio.play();
          var playPromise = audio.play();
           if (playPromise) {  
              playPromise.then(() => {
                  // 音频加载成功
                  // 音频的播放需要耗时
                  setTimeout(() => {
                      // 后续操作
                      //console.log("done");
                  }, audio.duration * 1000); // audio.duration 为音频的时长单位为秒
     
              }).catch((e) => {
                  //console.log("Operation is too fast, audio play fails");
              });
          }
        },

    这样就解决了 

  • 相关阅读:
    微信:JSSDK开发
    JSSDK图像接口多张图片上传下载并将图片流写入本地
    微信JSSDK上传多张图片
    laravel自定义公共函数的引入
    php把数据转换为json格式
    laravel控制器方法中,用函数作为变量进行传递时的处理方法
    ckeditor富文本编辑器的基本配置设置:
    laravel处理菜单保持的方法:
    laravel基于Bootstrap的成功和失败的提示信息和验证提示信息
    laravel Eloquent 查询数据库判断获取的内容是否为空
  • 原文地址:https://www.cnblogs.com/yf-html/p/10655589.html
Copyright © 2020-2023  润新知