doubleyong
管理员
管理员
  • 最后登录2025-12-02
  • 发帖数1198
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
阅读:10246回复:0

[前端]audio的play()方法,报错DOMException: The play() request was interrupted by a call to pause().

楼主#
更多 发布于:2020-04-01 10:21
ncaught (in promise): The play() request was interrupted by a call to pause().

场景
JavaScript 在调用 Audio 播放声音的时候,因为处理不当经常会出现上面的错误提示。


原因1:
在调用 Audio 的 play() 方法之后就立即被之后一次调用 pause() 方法中断了。错误提示中明确指出了调用 play 方法是返回了一个Promise对象。



原因2:
对同一个audio对象,频繁的修改src,并进行play(), 在没有播放完上一个声音时,又进行src的修改,进行play

解1:
setTimeout(() => {
    $video.play();
}, 10 );
或者

(function (argument) {
           // 音频文件
           var src = "./rank.mp3";
           // 初始化Aduio
           var audio = new Audio();
           var playPromise;
           audio.src = src;
           playPromise = audio.play();
           if (playPromise) {
               playPromise.then(() => {
                   // 音频加载成功
                   // 音频的播放需要耗时
                   setTimeout(() => {
                       // 后续操作
                       console.log("done.");
                   }, audio.duration * 1000); // audio.duration 为音频的时长单位为秒
               }).catch((e) => {
                   // 音频加载失败
               });
           }
       })();


解2:

不要使用同一个Audio对象,每次创建新的Audio对象设置src,再进行播放

参考:
https://blog.csdn.net/demon3182/article/details/79196282/
https://www.cnblogs.com/lixuemin/p/7374369.html
知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号