I want to create Dram Maschine on JS.
This is my project in codepan: https://codepen.io/faber_g/pen/wvjMzrm
So far only can not figure out why buttons start work after second click(each button acts like this)
maybe problev in that when function start work there is no any ckick happen, so it start initilize click only after second click?
Is there amy chance to solve problem in my code?
function reply_click(clicked_id) {
document.getElementsByClassName('clip')[clicked_id].play();
}
var btn = document.getElementsByClassName('drum-pad');
for (var i = 0; i < btn.length; i++) {
btn[i].addEventListener('click', function(e) {
document.getElementsByClassName('result')[0].innerHTML = e.target.name
});
}
var keyCodes = [{
code: 81,
name: "Heater 1"
},
{
code: 87,
name: "Heater 2"
},
{
code: 69,
name: "Heater 3"
},
{
code: 65,
name: "Heater 4"
},
{
code: 83,
name: "Heater 6"
},
{
code: 68,
name: "Open HH"
},
{
code: 90,
name: "Kick n' Hat"
},
{
code: 88,
name: "Kick"
},
{
code: 67,
name: "Closed HH"
}
];
document.addEventListener('keydown', function(e) {
for (var j = 0; j < keyCodes.length; j++) {
if (e.keyCode == keyCodes[j].code) {
document.getElementById(String.fromCharCode(e.keyCode)).play();
document.getElementsByClassName('result')[0].innerHTML = keyCodes[j].name
}
}
});
body {
dispaly: flex;
justify-content: center;
}
#drum-machine {
margin: 0 auto;
display: flex;
flex-flow: row wrap;
justify-content: center;
}
#display {
width: 200px;
height: 60px;
border: solid black;
}
<div id="drum-machine">
<div class="result" id="display">
<p></p>
</div>
<button class="drum-pad" id="0" name="Heater 1" onClick="reply_click(this.id)">
<audio class="clip" id="Q" src="https://s3.amazonaws.com/freecodecamp/drums/Heater-1.mp3">
</audio>
Q
</button>
<button class="drum-pad" id="1" name="Heater 2" onClick="reply_click(this.id)">
<audio class="clip" id="W" src="https://s3.amazonaws.com/freecodecamp/drums/Heater-2.mp3">
</audio>
W
</button>
<button class="drum-pad" id="2" name="Heater 3" onClick="reply_click(this.id)">
<audio class="clip" id="E" src="https://s3.amazonaws.com/freecodecamp/drums/Heater-3.mp3">
</audio>
E
</button>
<button class="drum-pad" id="3" name="Heater 4" onClick="reply_click(this.id)">
<audio class="clip" id="A" src="https://s3.amazonaws.com/freecodecamp/drums/Heater-4_1.mp3">
</audio>
A
</button>
<button class="drum-pad" id="4" name="Heater 6" onClick="reply_click(this.id)">
<audio class="clip" id="S" src="https://s3.amazonaws.com/freecodecamp/drums/Heater-6.mp3">
</audio>
S
</button>
<button class="drum-pad" id="5" name="Open HH" onClick="reply_click(this.id)">
<audio class="clip" id="D" src="https://s3.amazonaws.com/freecodecamp/drums/Dsc_Oh.mp3">
</audio>
D
</button>
<button class="drum-pad" id="6" name="Kick n' Hat" onClick="reply_click(this.id)">
<audio class="clip" id="Z" src="https://s3.amazonaws.com/freecodecamp/drums/Kick_n_Hat.mp3">
</audio>
Z
</button>
<button class="drum-pad" id="7" name="Kick" onClick="reply_click(this.id)">
<audio class="clip" id="X" src="https://s3.amazonaws.com/freecodecamp/drums/RP4_KICK_1.mp3">
</audio>
X
</button>
<button class="drum-pad" id="8" name="Closed HH" onClick="reply_click(this.id)">
<audio class="clip" id="C" src="https://s3.amazonaws.com/freecodecamp/drums/Cev_H2.mp3">
</audio>
C
</button>
</div>