Olá, Victor!
Quando você define uma constante dentro de um loop, como no caso do const tecla = listaDeTeclas[contador];
, o que você está fazendo é criar uma referência específica para cada elemento da lista listaDeTeclas
. A cada iteração do loop, essa constante tecla
aponta para um botão diferente.
Vamos dar uma olhada no código simplificado:
const listaDeTeclas = document.querySelectorAll('.tecla');
let contador = 0;
while (contador < listaDeTeclas.length) {
const tecla = listaDeTeclas[contador];
const instrumento = tecla.classList[1];
const idAudio = `#som_${instrumento}`;
tecla.onclick = function () {
tocaSom(idAudio);
}
contador++;
}
O código ta seguindo esses passos:
O loop while
itera sobre todos os elementos da lista listaDeTeclas
. Em cada iteração, a constante tecla
é definida para o elemento atual da lista. Extraímos a segunda classe do botão (por exemplo, tecla_pom
) e armazenamos em instrumento
. Em seguida, criamos uma string dinâmica que representa o ID do elemento <audio>
correspondente, como #som_tecla_pom
. Finalmente, adicionamos um evento de clique ao botão atual (tecla
). Quando esse botão é clicado, a função tocaSom(idAudio)
é chamada com o ID do áudio correto.
Por que o código sabe qual botão foi clicado?
Isso acontece porque, durante o loop, você está associando uma função de clique específica para cada botão. Essa função de clique (onclick
) é definida dentro do loop e, portanto, "lembra" qual era o valor de idAudio
no momento em que foi definida.
Pense em uma fila. Cada pessoa que passar no balcão (loop) vai receber uma senha única (ID). Quando essa senha for chamada por um funcionário (onclick), a pessoa que possui essa senha (ID) saberá exatamente o que fazer, porque além da senha, ela também recebeu instruções específicas (tocaSom(idAudio)).
Exemplo Prático
Imagine que você tem três botões com as classes tecla_pom
, tecla_clap
e tecla_tim
. O loop vai fazer o seguinte:
Primeira Iteração:
tecla
aponta para o botão tecla_pom
.instrumento
é tecla_pom
.idAudio
é #som_tecla_pom
.- Define
tecla.onclick
para tocar o som #som_tecla_pom
.
Segunda Iteração:
tecla
aponta para o botão tecla_clap
.instrumento
é tecla_clap
.idAudio
é #som_tecla_clap
.- Define
tecla.onclick
para tocar o som #som_tecla_clap
.
Terceira Iteração:
tecla
aponta para o botão tecla_tim
.instrumento
é tecla_tim
.idAudio
é #som_tecla_tim
.- Define
tecla.onclick
para tocar o som #som_tecla_tim
.
Dessa forma, cada botão tem sua própria função de clique associada ao som correto.
O loop automatiza o processo de maneira mais inteligente, facilitando a adição de novos botões, ou de "novas pessoas" nessa fila.
Reforço que em casos de dúvidas, conte sempre com o fórum da comunidade Alura! Bons estudos!
Sucesso ✨
Um grande abraço e até mais!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!