Projeto 1: Contador Simples
Crie um contador que incrementa e decrementa um número na tela.
Um contador simples é um ótimo primeiro projeto porque ele junta várias peças importantes do JavaScript em algo pequeno, visual e fácil de testar. Pense nele como um “mini laboratório”: você clica em botões e vê, na hora, o resultado na tela. Isso ajuda muito a entender como o JavaScript conversa com o HTML.
Neste projeto, a ideia é ter um número na tela e dois botões: um para aumentar e outro para diminuir. Parece simples (e é!), mas por trás disso você pratica conceitos centrais: variáveis, funções, eventos, manipulação do DOM e atualização de interface.
O que você está treinando sem perceber
Quando você cria um contador, você está treinando:
- Estado da aplicação: o valor atual do contador (a “memória” do programa).
- Manipulação do DOM: pegar um elemento da página e trocar o texto dele.
- Eventos: reagir ao clique do usuário.
- Funções: organizar ações repetitivas (incrementar, decrementar, renderizar).
- Fluxo lógico: decidir regras, como impedir número negativo (se quiser).
Em outras palavras: você começa a sair do JavaScript “parado” e entra no JavaScript interativo, que reage ao usuário.
Estrutura mental do projeto
Uma forma simples de pensar no contador:
- Criar uma variável
contadorcom valor inicial0. - Mostrar esse valor na tela.
- Quando clicar em “+”, somar 1.
- Quando clicar em “-”, subtrair 1.
- Atualizar a tela sempre que o valor mudar.
Essa sequência é o coração de muitos sistemas reais: guardar dado → mudar dado → refletir no visual.
Exemplo completo (HTML + CSS + JS no mesmo arquivo)
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Contador Simples</title>
<style>
body {
font-family: Arial, sans-serif;
display: grid;
place-items: center;
min-height: 100vh;
margin: 0;
background: #f4f6f8;
}
.card {
background: white;
padding: 24px;
border-radius: 12px;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.08);
text-align: center;
width: 280px;
}
h1 {
margin-top: 0;
font-size: 1.3rem;
color: #333;
}
#valor {
font-size: 3rem;
margin: 16px 0 20px;
color: #111;
}
.botoes {
display: flex;
gap: 10px;
justify-content: center;
}
button {
border: none;
border-radius: 8px;
padding: 10px 16px;
font-size: 1rem;
cursor: pointer;
}
#diminuir {
background: #ffdddd;
}
#aumentar {
background: #d9fdd3;
}
</style>
</head>
<body>
<div class="card">
<h1>Contador</h1>
<p id="valor">0</p>
<div class="botoes">
<button id="diminuir">-1</button>
<button id="aumentar">+1</button>
</div>
</div>
<script>
let contador = 0;
const valorElemento = document.getElementById("valor");
const botaoAumentar = document.getElementById("aumentar");
const botaoDiminuir = document.getElementById("diminuir");
function atualizarTela() {
valorElemento.textContent = contador;
}
botaoAumentar.addEventListener("click", function () {
contador++;
atualizarTela();
});
botaoDiminuir.addEventListener("click", function () {
contador--;
atualizarTela();
});
</script>
</body>
</html>
Entendendo as partes mais importantes
let contador = 0;
É a “caixinha” que guarda o valor atual.document.getElementById(...)
É como procurar, no HTML, o elemento certo para manipular.addEventListener("click", ...)
Diz ao JavaScript: “quando esse botão for clicado, execute esta ação”.textContent
Atualiza o texto do elemento na página.atualizarTela()
Evita repetição e deixa o código mais organizado.
Melhorias simples que você pode adicionar depois
Depois de fazer a versão básica, você pode evoluir:
- Botão para zerar o contador.
- Regra para não deixar valor ficar negativo.
- Mudança de cor quando o número for positivo, zero ou negativo.
- Salvar valor no
localStoragepara manter mesmo ao recarregar a página.
Perceba como um projeto pequeno vira um campo de treino completo. É exatamente isso que fortalece sua base.