我想在另一个音频开始时暂停当前播放的音频

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 保留当前正在播放的音频对象 - 在创建新对象之前,只需停止当前正在播放的对象(如果存在)

添加了“结束”事件处理程序 - 可能有点矫枉过正,但只需删除带有 addEventListenerremoveEventListener 的行(标有 //* )即可摆脱可能多余的事件处理