Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

bug no código

Boa tarde pessoal, encontrei um bug no código, caso vc segure a tecla de "Espaçao" e apertar o "Tab", a tecla fica com a cor vermelha pra sempre, mas de resto o código ta funcionando igual o da professora. Alguém sabe como corrigir isso?

4 respostas
solução!

Boa noite, chará! Meu primeiro post aqui. Foi ótima sua pergunta, pq verifiquei que isso realmente acontece com o código ao final do curso, e isso me encorajou a procurar a solução! Quando damos Tab com a tecla Espaço ou Enter pressionada, mudamos o foco do botão antes mesmo do nosso código detectar o evento "onkeyup".

A solução que encontrei foi detectar também o evento 'onblur' para também remover a classe "ativa". O evento 'onblur' detecta quando o foco saiu daquele elemento (oposto do evento 'onfocus'). Dessa forma, quando apertarmos Tab e o foco mudar para a proxima tecla, a classe 'ativa' é removida. adicione esse trecho de código à sua rotina "for".

Com certeza tem outras maneiras de economizar a linha 'classList.remove', mas estou iniciando em JS ainda kkkkk não aprendi a "juntar" eventos.

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

    //extrai o #id de cada uma das teclas
    const tecla = listaDeTeclas[contador];
    const instrumento = tecla.classList[1];
    const idAudio = `#som_${instrumento}`; //template string

    //verifica SE o botão foi clicado
    tecla.onclick = function () {
        tocaSom(idAudio);
    }

    //verifica SE as teclas de ativação Enter ou Space foram pressionadas
    tecla.onkeydown = function (evento) {
        if (evento.code == "Enter" || evento.code == "Space"){
        tecla.classList.add('ativa'); //deixa a tecla vermelha
        tocaSom(idAudio);    
        console.log(evento);    
        }
    }

    //volta para o estilo normal quando a tecla não está mais pressionada
    tecla.onkeyup = function () {
    tecla.classList.remove('ativa'); //tecla volta ao normal
    }

    //volta para o estilo normal quando o foco saiu do botão
    tecla.onblur = function (evento) {
        tecla.classList.remove('ativa');
        }
    }

muito legal esta dica! adicionei uma coisa legal tbm, adicionei a classe active

perceberam que quando clicamos com o mouse tem uma sombra vermelha mais escura? ,então estava na classe active

coloquei desta forma e deu certo:

if(evento.code === 'Space' || evento.code === 'Enter'){
            tecla.classList.add('ativa','active');
            }       
    }
    tecla.onkeyup = function (){
        tecla.classList.remove('ativa','active');
        }
    tecla.onblur = function (evento) {
        tecla.classList.remove('ativa','active');
        }

coloquei nas três funções

espero que ajude!

Nossa essas dicas ajudou bastante. Valeu pessoal por compartilhar

Boa noite, gostei das dicas! adicionei também no if que faz a verificação das teclas o Enter Numérico.

tecla.onkeydown = function (evento){ if(evento.code === 'Enter' || evento.code === 'Space' || evento.code === 'NumpadEnter') { tecla.classList.add('ativa', 'active'); } }

Existe uma diferença também entre manter pressionado o Espaço e o Enter, manter pressionado o Espaço ele não toca até você soltar, porém com o Enter ele fica tocando por diversas vezes. Alguém identificou e conseguiu solucionar isso?