Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Funcionamento do const e clique do botão

Olá, pessoal, não entendi como funciona o const e o loop nesse exemplo.

Como o código sabe que cliquei em um botão específico? Pelo que percebi usando um live server tanto o "while" quanto o "for" só são executados quando a página inicia, depois que finalizam o contador eles ficam parados. Na minha cabeça não tá fazendo sentido isso. O mais próximo que consegui gerar de um entendimento para isso é que na linha "const tecla = listaDeTeclas[contador];" está sendo criado uma "etiqueta" ou "marcação" em cada um dos botões, e quando clico, o código já sabe que cliquei naquele botão em específico. Se não for isso, não sei o que está acontecendo, na verdade eu até sei, mas não entendo rsrs... Alguém poderia me explicar o que aconteceu aí? Se for usando abstrações/exemplos me ajudaria bastante a entender :)

1 resposta
solução!

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)).

Minions

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:

  1. 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.
  2. 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.
  3. 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!