2
respostas

Bug nao observado no Projeto Final

Tendo exatamente o mesmo codigo do projeto final, por se tratar de um onkeydown para adicionar a class ativa e depender exclusivamente do onkeyup para remover a classe, temos o seguinte comportamento inesperado:

Caso o usuario mantenha pressionado a tecla Enter ou Space e antes de a soltar clicar com o mouse em outra tecla ou em qualquer elemento do site, nao houve o evento de remover a class ativa da tecla, fazendo ela continuar vermelha, deste modo eh possivel pintar todo o teclado de vermelho...

Alguem sabe como resolver?

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

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

Teclado utilizado no curso deste forum, com o Bug supracitado

Baixar o projeto: https://github.com/alura-cursos/aluramidi-curso/archive/refs/heads/aula5.zip

2 respostas

Olá Jose, tudo bem?

O comportamento inesperado que você está observando ocorre porque, ao clicar em outro elemento do site enquanto a tecla Enter ou Space ainda está pressionada, o evento onkeyup não é disparado, o que faz com que a classe 'ativa' não seja removida.

Uma solução para esse problema seria adicionar um event listener para o evento 'blur' no elemento que está recebendo o evento de pressionar a tecla. Dessa forma, sempre que o elemento perder o foco, a classe 'ativa' será removida, mesmo que a tecla Enter ou Space ainda esteja pressionada.

Por exemplo:

tecla.addEventListener('blur', function() {
  tecla.classList.remove('ativa');
});

Espero ter ajudado e bons estudos!

Olá, pessoal!

Aproveitando o tópico, notei que há uma diferença no meu código, mesmo eu tendo feito exatamente conforme passado durante as aulas (ao menos acho que sim, rs) e ter copiado o código html e css do github.

No meu Chrome, quando pressiono "Enter", a tecla não fica vermelha tal como proposto pela instrutora durante a realização do código. O "Space", por outro lado, fica vermelho.

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

    if (elemento && elemento.localName === 'audio') {
        elemento.play();
    }
    else {
        console.log('Elemento não encontrado ou seletor inválido');
    }

}

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

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

    const tecla = listaDeTeclas[contador];
    const instrumento = tecla.classList[1];
    const idAudio = `#som_${instrumento}`; //template string

    tecla.onclick = function () {
        tocaSom(idAudio);
    }

    tecla.onkeydown = function (evento) {

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

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

}