1
resposta

[Dúvida] Tentativa fazer som com varial - Ajuda

Nossa, tentei fazer um pouco diferente da aula, usando uma variavel dentro da função tocasom(). Porém tenho o famoso erro in promise. Alguém pode me ajudar o porquê ?

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

function tocasom(tecla) {
    var tecla
    document.querySelector(tecla).play();
}

var numeroTeclas = listaDeTeclas.length;


for (var n = 0; n < numeroTeclas; n++) {
    var teclar = listaDeTeclas[n].className.split(" ");
    listaDeTeclas[n].onclick = tocasom('#som_'+teclar[1]);
}
1 resposta

Olá João, tudo bem com você?

Peço desculpa pela demora para responder o seu tópico.

Dando uma olhada no seu código percebi que a forma que você montou ele fez com que ao executá-lo, que no caso seria ao abrir a página, você estaria tocando todos os sons ao mesmo tempo.

Como forma de solução desenvolvi um código um pouco diferente que também utiliza a estrutura de repetição for para passar todos os elementos da lista. Veja no exemplo abaixo:

var botoes = document.querySelectorAll(".tecla");
var audios = document.querySelectorAll("audio");

function tocaSom(i) {
    audios[i].play();
}

for (let i = 0; i < botoes.length; i++) {
    botoes[i].onclick = function () {
        tocaSom(i);
    }
}

Já no início dele estou criando duas listas, sendo elas dos botoes e a dos audios, com isso vou ter acesso a todos esses elementos e poder trabalhar com eles mais a frente no código.

Pulando a função tocaSom() temos o nosso for nele vou está percorrendo toda a minha lista de botões e a partir do click em determinado botão, vou passar qual é a posição da lista que esse botão foi clicado para a função tocaSom().

Agora sobre a função tocaSom(), basicamente vou está recebendo a posição da lista do botão que foi clicado e adiciono essa posição para a minha lista de audios, para que ela seja reproduzida na mesma posição. Isso dá certo porque a sequência de elementos nos botões e áudios são as mesmas nas listas. Espero que eu tenha lhe ajudado, caso ainda tenha dúvidas ou problemas relacionados com esse tópico, estarei a sua disposição. Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.