1
resposta

[Dúvida] AluraFone

No meu projeto do AluraFone, o botão fica amarelo quando usarmos espaço ou enter, mas quando clicamos no número não estava ficando, por isso fiz algumas modificações (incluir uma classe nos botões e inclui a classe e a propriedade active no arquivo index.html como observei no projeto do aluramidi.

Agora quando clico no espaço ou enter o botão fica amarelo, mas quando clico com o mouse ele fica verde e depois amarelo, o que preciso corrigir?

Outra pergunta: existe uma forma mais simples de fazer comparação de vários valores?

index.html

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <link rel="stylesheet" href="style.css">

    <title>Alura fone</title>
</head>
<body>
    <h1> Alura Fone </h1>
    <section class="teclado">
       <input class="botaonum" type="button" value="1">
       <input class="botaonum"type="button" value="2">
       <input class="botaonum"type="button" value="3">
       <input class="botaonum"type="button" value="4">
       <input class="botaonum"type="button" value="5">
       <input class="botaonum"type="button" value="6">
       <input class="botaonum"type="button" value="7">
       <input class="botaonum"type="button" value="8">
       <input class="botaonum"type="button" value="9">
       <input class="botaonum"type="button" value="*">
       <input class="botaonum"type="button" value="0">
       <input class="botaonum"type="button" value="#">
     </section>
     <input type="tel" placeholder="Digite seu telefone">   
     <script src="main.js"></script>
</body>
</html>

style.css

* {
    box-sizing: border-box;
  }
  
  body {
    display: flex;
    justify-content: center;
    align-items: center;
    flex-direction: column;
    background-color: #191919;
    min-height: 100vh;
  }
  
  input {
    border: none;
    color: inherit;
    font-size: inherit;
    font-weight: inherit;
    font-family: inherit;
  }
  
  h1 {
    font-family: 'Montserrat', sans-serif;
    font-size: 24px;
    color: #fff;
  }
  
  .teclado {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 10px; 
    background-color: #cccccc;
    border-radius: 30px;
    padding: 10px;
  }
  
  input[type=button] {
    border-radius: 20px;
    cursor: pointer;
    font-family: 'Montserrat', sans-serif;
    height: 80px;
    width: 80px;
  }
  
  input[type=tel] {
    background-color: #cccccc;
    border-radius: 10px;
    font-family: monospace;
    font-size: 22px;
    height: 40px;
    margin-bottom: 24px;
    padding: 10px;
    text-align: center;
    width: 280px;
  }

  .ativa,
  .botaonum:active {
    background-color: yellow;
  }

main.js

const listaDeTeclas = document.querySelectorAll('input[type=button]');
const inputTel = document.querySelector('input[type=tel]');

for (let i=0; i < listaDeTeclas.length; i++){
    const tecla = listaDeTeclas[i];

    tecla.onclick = function () {
        inputTel.value += tecla.value;
    }

    tecla.onkeydown = function (evento) {
        
        if(evento.code === "Enter" || evento.code === "Space") {
            tecla.classList.add('ativa');
        }
        if(evento.key === "0" || evento.key === "1" || evento.key === "2" || evento.key === "3"
        || evento.key === "4"|| evento.key === "5"|| evento.key === "6"|| evento.key === "7"
        || evento.key === "8"|| evento.key === "9"|| evento.key === "*"|| evento.key === "#") 
        {
            inputTel.value +=evento.key;
        }
    }

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

Opa Fabiana, tudo certo?

Testando seu código não percebi o comportamento do botão ficar verde ao clique do mouse. Analisando o seu CSS não há nenhum código que possa resultar nesse comportamento.

Quanto a sua segunda dúvida, sua forma de realizar a comparação está ótima inicialmente. Uma forma mais “simples” de fazer comparação de vários valores seria usando um laço de repetição e data attributes, um loop que verificasse cada um sequencialmente e uma forma de se extrair os dados. Embora seja mais complexa de se elaborar, dessa forma evitaríamos a repetição de código e o conseguiríamos manter a manutenção em caso de futuras mudanças nos elementos. Deixo abaixo algumas recomendações de conteúdos que podem ajudar:

Fico à disposição.

Tenha um bom dia e bons estudos.