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

[Dúvida] Leitura de teclas por JavaScript

Olá! Estou fazendo o curso de JavaScript para Web e me deparei com um problema que, embora pequeno, me deixou em dúvida. Estou fazendo o teclado de sons MIDI junto da professora, mas quando uso JS para identificar as teclas Enter e Space como ativas, o estilo CSS do Enter não é o mesmo da Space.

Ambas entram no estado "active", mas acho que a Enter não fica em "focus". Achei que era normal, mas na aula o teclado não faz isso. Alguém sabe me informar se eu gerei algum erro? Abri o HTML no Opera e também no Edge e em ambos o resultado é o mesmo. Tenho o projeto em estado atual no GitHub: https://github.com/Wihelm6/Mesa_de_sons_-_JavaScript

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

tecla.onkeyup = function () {
    tecla.classList.remove('ativa');
}
2 respostas
solução!

Olá Felipe!

Pelo que entendi, você está com dificuldades em identificar a diferença entre o estilo CSS da tecla Enter e da Space quando estão no estado "active".

Uma possível solução para esse problema seria adicionar a classe "focus" à tecla que está em foco. Para isso, você pode adicionar o seguinte código dentro da função "onkeydown":

tecla.classList.add('focus'); 

E para remover a classe "focus" quando a tecla perde o foco, adicione o seguinte código dentro da função "onkeyup":

tecla.classList.remove('focus'); 

Assim, o código final ficaria assim:

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

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

Espero que essa solução ajude! Bons estudos!

Tentei essa adição do focus mas também não funcionou. Nos estilos usados existe o estado active, o focus, e o ".active:focus" separadamente, esse terceiro é o que não está sendo acionado com a tecla Enter.

.tecla.ativa,
.tecla:active {
  background-color: var(--vermelha);
  border: 4px solid  var(--vermelha);
  box-shadow: 3px 3px 0 var(--vermelha-escura) inset;
  color: var(--branca);
  outline: none;
}

.tecla.focus,
.tecla:focus {
  outline: none;
  box-shadow: 1px 1px 10px var(--luz);
}

.tecla.active:focus,
.tecla:active:focus {
  box-shadow: 3px 3px 0 var(--vermelha-escura) inset, 1px 1px 10px var(--luz);
}