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

[Dúvida] Relógio não se move

Olá, tenho um projeto que era pra ser simples. Mas o simples não tá indo;

  • O relógio sempre fica marcando meio dia. E o ponteiro de segundo não move por nada também, podeira me ajudar?
// Aguarda o carregamento completo do documento
window.addEventListener('DOMContentLoaded', () => {
    const ponteiroHora = document.getElementById('ponteiro-hora');
    const ponteiroMinuto = document.getElementById('ponteiro-minuto');
    const ponteiroSegundo = document.getElementById('ponteiro-segundo');

    function atualizarRelogio() {
        const agora = new Date();

        const segundos = agora.getSeconds();
        const minutos = agora.getMinutes();
        const horas = agora.getHour();

        // Cálculo dos ângulos (360 graus divididos pelo tempo)
        const grausSegundo = (segundos / 60) * 360;
        const grausMinuto = ((minutos + segundos / 60) / 60) * 360;
        const grausHora = ((horas % 12 + minutos / 60) / 12) * 360;

        // Aplica a rotação nos elementos
        ponteiroSegundo.style.transform = `rotate(${grausSegundo}deg)`;
        ponteiroMinuto.style.transform = `rotate(${grausMinuto}deg)`;
        ponteiroHora.style.transform = `rotate(${grausHora}deg)`;
    }

    // Atualiza a cada 1 segundo
    setInterval(atualizarRelogio, 1000);

    // Executa imediatamente para não esperar o primeiro segundo
    atualizarRelogio();
});
body {
    background-color: #111;
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
    margin: 0;
}

.relogio {
    width: 350px;
    height: 350px;
    background-color: #ffffff;
    border: 10px solid #222;
    border-radius: 50%;
    position: relative;
    box-shadow: 0 20px 40px rgba(0, 0, 0, 0.6);
}

.ponteiro {
    position: absolute;
    bottom: 50%;
    left: 50%;
    transform-origin: bottom;
    border-radius: 10px;
}

.hora {
    width: 8px;
    height: 70px;
    background-color: #222;
    margin-left: -4px; /* Metade da largura para centralizar */
}

.minuto {
    width: 5px;
    height: 110px;
    background-color: #555;
    margin-left: -2.5px;
}

.segundo {
    width: 2px;
    height: 140px;
    background-color: #e74c3c;
    margin-left: -1px;
}

.centro {
    width: 14px;
    height: 14px;
    background-color: #e74c3c;
    border-radius: 50%;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    z-index: 10;
    border: 2px solid #fff;
}
<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Relógio Analógico Profissional</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>

    <div class="relogio">
        <div class="ponteiro hora" id="ponteiro-hora"></div>
        <div class="ponteiro minuto" id="ponteiro-minuto"></div>
        <div class="ponteiro segundo" id="ponteiro-segundo"></div>
        <div class="centro"></div>
    </div>

    <script src="script.js"></script>
</body>
</html>
2 respostas
solução!

Oi, Estudante. Tudo bem?

Testei aqui e o problema é simples. Um erro de digitação, no seu código tá assim:

const horas = agora.getHour();

Mas o correto é:

const horas = agora.getHours();

Quando você escreve getHour(), o interpretador do navegador ou do Node.js procura por uma função com esse nome exato dentro do objeto Date. Como essa função não foi definida pelos criadores da linguagem, o sistema retorna um erro informando que getHour não é uma função (is not a function).

Ao ajustar isso, tudo funciona:

Relógio funcionando

Conteúdos relacionados
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Olá, Lorena

Deu certo. Quero aproveitar para agradecer pela sua ajuda nesse tópico. Sua resposta foi direta, clara e resolveu o problema de forma rápida, isso faz muita diferença pra quem está aprendendo e travado em algo aparentemente simples.

O seu trabalho aqui no fórum é realmente essencial. Esse tipo de suporte não só resolve dúvidas pontuais, mas também ajuda muita gente a evoluir com mais segurança.

Obrigado por compartilhar o link, eu não conhecia a documentação. Acabei fazendo tudo pela IA e acabei perdendo esses passos iniciais.