当另一个音频启动时,我想暂停当前播放的音频



单击播放音频文件的艺术家图像时,我有一个web应用程序。我对此很陌生。我在网上找到了一些解决方案,但我做不到。当另一个音频开始时,我想暂停当前播放的音频。但它会在后台继续播放,但我想暂停并从那时开始继续播放。到目前为止,我无法做出改变。

function switchCase(key){
switch (key) {
case 'mozart-img':
var audio = new Audio("sounds/mozart.mp3")
audio.play();
break;
case 'beethoven-img':
var audio = new Audio("sounds/beethoven.mp3")
audio.play();
break;
case 'chopin-img':
var audio = new Audio("sounds/chopin.mp3")
audio.play();
break;
case 'schumann-img':
var audio = new Audio("sounds/schumann.mp3")
audio.play();
break;                
default:
break;
}
}

在此处使用IIFE,因此不需要全局(除了您已经拥有的函数switchCase(

const switchCase = (function() {
let playing;
function stop() {
if (playing) {
playing.removeEventListener('ended', stop); //*
playing.pause();
playing = null;
}
}
return function (key){
stop();
switch (key) {
case 'mozart-img':
playing = new Audio("sounds/mozart.mp3");
break;
case 'beethoven-img':
playing = new Audio("sounds/beethoven.mp3");
break;
case 'chopin-img':
playing = new Audio("sounds/chopin.mp3");
break;
case 'schumann-img':
playing = new Audio("sounds/schumann.mp3");
break;                
default:
break;
}
playing.play();
playing.addEventListener('ended', stop); //*
};
})();

因此,播放保存当前正在播放的音频对象-在创建新对象之前,只需停止当前正在播放(如果存在(的

添加";结束";事件处理程序-可能是过度使用,但只需删除带有addEventListenerremoveEventListener(用//*标记(的行,就可以消除可能冗余的事件处理

最新更新