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;
}
}