我有一段看起来像下面的代码,它工作正常。它的作用是当鼠标点击名为synth的div时发出振荡器声音。然后当释放鼠标按钮时停止播放振荡器。
synth.onmousedown= function () {
oscillator = context.createOscillator(), // Creates the oscillator
oscillator.type = synthWaveform.value;
oscillator.frequency.value = pitchInput.value;
oscillator.connect(context.destination); // Connects it to output
oscillator.noteOn(0);
};
synth.onmouseup = function () {
oscillator.disconnect();
};
然后我添加了下面的代码,以便当用户按下键盘时,它会触发振荡器。问题是,当按下按键时,它会重复播放,然后在释放键盘字符时不会停止。我想知道是否有任何可用于规避此问题的库或代码。目标是让最终结果像mousedown / up效果一样,但键盘动作会触发声音。谢谢。
$('body').keydown(function() {
oscillator = context.createOscillator(), // Creates the oscillator
oscillator.type = synthWaveform.value;
oscillator.frequency.value = pitchInput.value;
oscillator.connect(context.destination); // Connects it to output
oscillator.noteOn(0);
});
$('body').keyup(function() {
oscillator.disconnect();
});
答案 0 :(得分:1)
如果你需要比下面选项更精彩的东西,你可以使用underscore.js去抖。
var keydown = false;
$('body').keydown(function() {
if(!keydown){
oscillator = context.createOscillator(), // Creates the oscillator
oscillator.type = synthWaveform.value;
oscillator.frequency.value = pitchInput.value;
oscillator.connect(context.destination); // Connects it to output
oscillator.noteOn(0);
keydown = true;
}
});
$('body').keyup(function() {
oscillator.disconnect();
keydown = false;
});
答案 1 :(得分:0)
这可能是一种解决方法
var keyIsDown = false;
$('body').keydown(function() {
if(keyIsDown) {
// key is already down
return true;
}
keyIsDown = true;
// do your keydown handler
}
$('body').keyup(function() {
keyIsDown = false;
}