我想在另一个音频开始时暂停当前播放的音频
I want to pause current playing audio when another audio start
单击播放音频文件的艺术家图像时,我有一个 Web 应用程序。
我对此很陌生。我在网上找了几个解决办法,但我做不到。
我想在另一个音频 start.but 继续在后台播放时暂停当前播放的音频,但我想要的是暂停并从那时起继续播放。到目前为止,我无法进行更改。
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); //*
};
})();
因此,playing 保留当前正在播放的音频对象 - 在创建新对象之前,只需停止当前正在播放的对象(如果存在)
添加了“结束”事件处理程序 - 可能有点矫枉过正,但只需删除带有 addEventListener
和 removeEventListener
的行(标有 //* )即可摆脱可能多余的事件处理
单击播放音频文件的艺术家图像时,我有一个 Web 应用程序。 我对此很陌生。我在网上找了几个解决办法,但我做不到。 我想在另一个音频 start.but 继续在后台播放时暂停当前播放的音频,但我想要的是暂停并从那时起继续播放。到目前为止,我无法进行更改。
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); //*
};
})();
因此,playing 保留当前正在播放的音频对象 - 在创建新对象之前,只需停止当前正在播放的对象(如果存在)
添加了“结束”事件处理程序 - 可能有点矫枉过正,但只需删除带有 addEventListener
和 removeEventListener
的行(标有 //* )即可摆脱可能多余的事件处理