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

Atribuir os áudios aos botões

Ainda mais pro início do curso, quando foi usada uma lista para agrupar os botões, eu imaginei que também seria usada uma lista dos áudios para vincular aos botões. Segui normalmente o curso, deu tudo certo conforme as orientações da Vanessa, mas eu fiquei com a minha ideia original na cabeça e resolvi tentar chegar ao mesmo resultado utilizando uma lista dos áudios. Depois de bater cabeça um pouco, consegui. Meu código ficou assim:

const listaDeTeclas = document.querySelectorAll('.tecla'); const sonsTeclas = document.querySelectorAll('audio');

function tocaSom(idAudio) { const elemento = document.querySelector(idAudio);

if (elemento && elemento.localName === 'audio'){
    elemento.play();
}

else {
    console.log('Elemento não encontrado');
}

}

for (let i = 0; i < listaDeTeclas.length; i++) {

const teclaDaVez = listaDeTeclas[i];
const idSom = sonsTeclas[i].id;

teclaDaVez.onclick = function (){
    tocaSom(`#${idSom}`);
}

teclaDaVez.onkeydown = function (evento){
    if (evento.code === 'Space' || evento.code === 'Enter') {
        teclaDaVez.classList.add('ativa');
    }
}

teclaDaVez.onkeyup = function (){
    teclaDaVez.classList.remove('ativa');
}

}

Eu imagino que a minha solução seja mais custosa em termos de processamento (já que o código tem que agrupar uma segunda lista). Porém eu entendo que a solução da aula só foi possível porque os nomes das classes dos botões estavam contidos dentro dos nomes dos IDs dos áudios, ou seja, o HTML já foi estruturado pensando nessa solução.

Pra um caso hipotético em que o HTML não tivesse sido tão bem planejado, ou que o vínculo entre os dois conjuntos de elementos não estivessem previstos no projeto inicial e essa necessidade surgisse posteriormente, suponho que aplicar a lógica que eu segui seria mais simples do que reestruturar as classes e IDs de todos os elementos no HTML, correto? (Embora também seja importante notar que a minha solução só funcionou porque os elementos "botão" e "áudio" vinculados entre si estavam na mesma ordem dentro das suas respectivas estruturas do HTML - 'pom' em primeiro, 'clap' em segundo, etc.).

1 resposta
solução!

Oi Vinícius, tudo bem?

Sua pergunta é muito interessante e sua solução alternativa é bastante válida. De fato, sua abordagem seria mais prática em um cenário onde o HTML não foi planejado com a correspondência entre os IDs dos áudios e as classes dos botões.

É verdade que sua solução pode ser um pouco mais custosa em termos de processamento, já que ela precisa criar uma segunda lista. No entanto, o impacto no desempenho seria mínimo, a menos que estivéssemos lidando com um número muito grande de elementos.

Você também mencionou um ponto importante: sua solução depende da ordem dos elementos nas listas. Isso poderia ser um problema se a ordem dos botões e dos áudios não correspondesse.

É bom lembrar que não existe uma "solução perfeita" para todos os casos. A melhor solução depende das necessidades específicas do seu projeto. Sua abordagem é um ótimo exemplo de como pensar fora da caixa e encontrar soluções alternativas para um problema. Continue assim!

Um abraço e bons estudos.