的问题是这样的: 在下面的例子中,http://jsfiddle.net/GmgGY/2/动态创建了一系列与KEYUP玩振荡器/下
当你点击橙色按钮创建一个新的div。当你点击这个div时,它会播放一个振荡器。如果你按下键盘上的按键(keydown),它也会播放它。当键盘字符被抬起时(键盘),它停止播放。这是好的,我想要的。
但是,当您点击橙色按钮多次,创建多个合成器。当你按下键盘上的一个按键时,所有的按键都会播放(这是我想要的),但是只有最后创建的按键才能响应按键事件。我希望所有按键响应按键事件。不仅仅是最后一个。
我不知道如何解决这个问题。
每个动态创建div有一个唯一的ID,但也是一类是通用于所有的人。我认为可能有一种方法来选择类(synth.class),并在keyup上启动universal oscillator.disconnect()。
我想另一件事是我的问题,可能需要某种形式的迭代线程补偿任何DOM问题导致了此(假设它不只是专门编程迄今)。但我不确定。
Javascript代码如下。我尽量保持尽可能最小,但我无法弄清楚如何使它比这更小,并且仍然清楚。我省略了html和css元素,但将它们保留在JSfiddle示例中。
$(function(){
var SynthCreationModule = (function(){
context = new webkitAudioContext();
var orangeButton;
var applicationArea = document.getElementById("applicationArea"),
orangeButton = document.getElementById("orangeButton"),
counterSynth = 1;
counterPitchInput = 1;
orangeButton.addEventListener("click",createSynth, false);
function createSynth() {
var synth = document.createElement("div");
synth.className = "synth";
synth.id = "synthid" + (counterSynth++);
applicationArea.appendChild(synth);
var pitchInput = document.createElement('input');
pitchInput.type = "range";
pitchInput.className = "pitchInputClass";
pitchInput.id = "pitchInput" + (counterPitchInput++);
pitchInput.min = "0";
pitchInput.max="2000";
synth.appendChild(pitchInput);
synth.onmousedown= function() {
oscillator = context.createOscillator(),
oscillator.type = 2;
oscillator.frequency.value = pitchInput.value;
oscillator.connect(context.destination);
oscillator.noteOn(0);
};
synth.onmouseup = function() {
oscillator.disconnect();
};
// Keydown & keyup events to launch oscillator. (These don't work properly if you create two or more synths. Playing a key down works, but keyup only works on the last created synth. The previous created synths will continue to create additional oscillators but the keydown will not work to stop them.
var keydown = false;
$('body').keydown(function() {
if(!keydown){
synth.onmousedown();
keydown = true;
}
});
$('body').keyup(function() {
synth.onmouseup();
keydown = false;
});
$(synth).draggable();
};
}());
});
您的评论的第二部分是我将在了解如何做完全的工作,但感谢把它扔在那里。我离开了“注意/关闭的想法注意事项被打破或不按预期工作,因此oscillator.disconnect – William