在激活/阻止声音混合后关闭特定的javascript 5秒

时间:2018-03-15 02:05:04

标签: javascript html

我在HTML中有大型离线测验节目,它基本上揭示了棋盘上的问题(如Jeopardy)。一切都很完美,但我需要最后一个功能,这就是"蜂鸣器"。

使用stackoverflow帮助,我只是用这个javascript构建它:

var sounds = {
16 : 'Player1', // key 'Shift'
32 : 'Player2', // key 'Spacebar'
17 : 'Player3', // key 'Ctrl' 
};
document.onkeydown = function(e) {
var soundId = sounds[e.keyCode];
if (soundId) document.getElementById(soundId).play();
else console.log("key not mapped : code is", e.keyCode);
}         

使用标记在HTML文档正文中激活:

<audio id=Player1 src=zvuky/Prihlasenie1.mp3>
<audio id=Player2 src=zvuky/Prihlasenie2.mp3>
<audio id=Player3 src=zvuky/Prihlasenie3.mp3>

两个或三个玩家坐在一个键盘后面,当他们知道答案时,他们按SHIFT,CTRL或SPACEBAR。

单独按键或延迟按键时工作正常。问题是,他们可能会同时按下他们的按键,然后将两三个声音混合在一起(而且无法判断谁是第一个)。

也许有一种复杂的方法可以检查,谁是第一个并展示它,但我认为我不需要它。每个声音都不同。它从不同的嗡嗡声(1秒)开始,之后,有一个人声(cca 3秒),他说'#34;播放器1&#34;例如。因此,当声音不混合时,每个人都知道是谁按下了键。

是否有一种简单的方法可以调整此脚本,因此在激活后(三个声音中的任何一个开始播放),它会自动关闭五秒钟(因此没有按键激活它们的声音),然后它又开始工作了?

我无法在每个问题(加载测验)之后重新加载页面,因此它不能只是一次激活&#34;脚本。

1 个答案:

答案 0 :(得分:0)

尝试使用setTimeout

var sounds = {
16 : 'Player1', // key 'Shift'
32 : 'Player2', // key 'Spacebar'
17 : 'Player3', // key 'Ctrl' 
};
var ableToPlaySound = true
document.onkeydown = function(e) {
var soundId = sounds[e.keyCode];
if (soundId){
  if(ableToPlaySound){
    ableToPlaySound = false
    console.log(soundId + ' playing')
    setTimeout(function(){ableToPlaySound=true}, 5000)
  } else {
    console.log('sorry, ' + soundId + ', someone is already playing')
  }
}

else console.log("key not mapped : code is", e.keyCode);
}