var audioPlaying = false;

if (!audioPlaying) {
    // get a random audio element that has the class .sound
    audio = $('.s' + (Math.round(Math.random() * $('.sounds').size())));
    audio.get(0).play();
    audioPlaying = true;
    setTimeout(function(audioPlaying) {
        audioPlaying = false;
    }, 1000);
}

我正在研究可在事件中播放声音的JavaScript。我不需要每秒播放多个声音。我有一个函数检查音频是否正在播放(通过true / false变量),如果是,则选择一个随机音频元素并播放它。然后,它将变量设置为说正在播放音频(true),然后设置超时以在1秒后将变量切换回false。

这样可以使音频至少在1秒钟后播放。但是,似乎从未将audioPlaying变量设置回false。播放一种声音,此后不播放。如果我删除了将audioPlaying更改为true的代码,则声音播放时它们之间没有任何间隔。

有人知道怎么了吗?

最佳答案

尝试这样的事情:

var audioPlaying = {
    _audioPlayingNow: false,

    playAudio: function()
    {
        if ( !audioPlaying._audioPlayingNow )
        {
            var audio = $('.s' + (Math.round(Math.random() * $('.sounds').size())));
            audio.get(0).play();

            audioPlaying._audioPlayingNow = true;
            setTimeout( audioPlaying._resetAudioPlaying, 1000 );
        }
        else
        {
            setTimeout( audioPlaying.playAudio, 1000 );
        }
    },

    _resetAudioPlaying: function()
    {
        audioPlaying._audioPlayingNow = false;
    }
}

09-19 08:50