2011-03-11 54 views
2
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秒后将该变量切换回假。使用jQuery + Javascript播放HTML5具有间距的音频元素

这应该使音频播放至少1秒后播放。但是,它似乎没有将audioPlaying变量重新设置为false。其中一个声音播放,没有之后。如果我删除了将audioPlaying更改为true的代码,则播放的声音之间没有任何间距。

任何人都知道什么是错的?

回答

0

尝试这样:

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