Timer de Contagem Regressiva
Crie timers de contagem regressiva com tempo personalizado e lembretes
Definir Tempo
O que é um Timer de Contagem Regressiva?
Um temporizador de contagem regressiva começa em uma duração escolhida e desce até zero. Ele é útil para trabalho focado, cozinha, intervalos de exercício, aulas, reuniões, apresentações e qualquer tarefa em que respeitar um bloco de tempo seja mais importante do que olhar o relógio atual. Diferente de um cronômetro, que mede o tempo decorrido a partir de zero, a contagem regressiva mostra quanto falta e quando a atividade deve terminar. Isso ajuda a controlar o ritmo, encerrar no momento certo e evitar atrasos. Esta página também inclui cronômetro e vários temporizadores, servindo para voltas, etapas e tarefas paralelas. Como tudo roda na aba aberta do navegador, mantenha a página ativa quando o alerta for importante.
Como Usar
Como usar
- Selecione uma aba: Contagem Regressiva, Cronômetro ou Múltiplos Temporizadores
- Para Contagem Regressiva: insira horas/minutos/segundos ou clique em tempos predefinidos
- Clique em 'Iniciar' para começar a contagem e em 'Pausar' para pausar
- Um alerta sonoro é emitido quando a contagem regressiva termina
Notas sobre Temporização
- Os temporizadores do navegador podem pausar ou ficar imprecisos quando a aba fica em segundo plano, o dispositivo entra em repouso ou o modo de economia de energia é ativado.
- Para reuniões, provas ou trabalho em produção, use um relógio do sistema ou um temporizador dedicado como referência final.
Casos de uso
Princípio técnico
O motor de contagem regressiva não usa setInterval(callback, 1000) como relógio autoritativo - essa abordagem acumula desvio porque a especificação do event-loop do HTML5 só garante um atraso mínimo, não uma cadência fixa. Em vez disso, a página registra um startTime via Date.now() (ou performance.now() para resolução submilissegundo) e em cada tick calcula remaining = targetDuration - (Date.now() - startTime). A atualização visual é conduzida por requestAnimationFrame, que é limitado pelo navegador à taxa de vsync do display (tipicamente 60 Hz / 16,67 ms, às vezes 120 Hz em laptops e celulares de alta taxa de atualização). Esse design autocorretivo mantém os segundos exibidos alinhados com o relógio real mesmo após a fila de tarefas do JavaScript parar para coleta de lixo ou um layout longo. A limitação em segundo plano é a principal fonte de surpresas com temporizadores. De acordo com o HTML Living Standard, abas ocultas limitam setInterval/setTimeout a um mínimo de 1000 ms (Chrome, Firefox e Safari implementam isso com suas próprias heurísticas; o Chrome adicionalmente congela abas inativas após cerca de 5 minutos em bateria). A Page Visibility API (document.visibilityState, document.hidden, o evento visibilitychange) permite que o temporizador detecte uma troca de aba e reconcile seu relógio interno com Date.now() quando a aba volta a ficar visível. O som de fim de contagem é reproduzido pela Web Audio API (AudioContext + OscillatorNode ou um AudioBuffer pré-carregado), que requer ativação prévia por gesto do usuário no iOS Safari e no Chrome moderno para satisfazer a política de autoplay. Um alerta visual de melhor esforço também é renderizado e, se o usuário tiver concedido permissão anteriormente, um toast em nível do sistema operacional pode ser exibido através da Notification API. O modo multi-timer mantém cada temporizador em seu próprio objeto de estado com um startTime independente; um único loop de requestAnimationFrame itera sobre o array a cada quadro em vez de girar um intervalo separado por temporizador, o que mantém o trabalho de CPU constante conforme o número cresce. A persistência entre recarregamentos usa localStorage com um endTime serializado, para que a página possa recomputar o tempo restante ao montar. Esteja ciente de que correções de relógio pelo sistema operacional (alteração manual de hora, salto NTP ou transição de horário de verão) deslocam Date.now() instantaneamente e podem fazer um temporizador recuperado parecer saltar - performance.now() é monotônico e é preferido quando apenas o tempo decorrido importa dentro de uma única carga de página.
- Use Date.now() ou performance.now() como fonte de verdade; nunca confie em ticks acumulados de setInterval.
- requestAnimationFrame limita a repintura à vsync do display (60 Hz = ~16,67 ms; 120 Hz = ~8,33 ms).
- Abas ocultas limitam setInterval a um mínimo de 1000 ms conforme a especificação HTML; o Chrome pode congelar a página após ~5 min em bateria.
- A Page Visibility API (evento visibilitychange) é o gancho para reconciliar o temporizador quando a aba volta ao primeiro plano.
- A Web Audio API requer ativação prévia por gesto do usuário no iOS Safari e Chrome para satisfazer a política de autoplay.
- A Notification API requer Notification.requestPermission() e um contexto seguro (HTTPS ou localhost).
- performance.now() é monotônico entre saltos NTP e mudanças de horário de verão; Date.now() não é - escolha adequadamente.
Exemplos
Bloco de trabalho Pomodoro (25 min de foco + 5 min de pausa)
Modo : Contagem regressiva
Duração : 00 : 25 : 00
Início em : 14:00:00
Término em : 14:25:00 (alarme toca)
Próximo : timer de pausa de 5 minutos (predefinido)Cozinha - ovo mole (6 min 30 s)
Modo : Contagem regressiva
Definir : 00 : 06 : 30
Em 1:00 -> aviso visual destaca o tempo restante
Em 0:00 -> alarme + banner na página: Contagem Regressiva Concluída!Cronômetro com voltas (treino de 1 km)
Início -> 00:00.00
Volta 1 -> 04:12.80 (parcial 04:12.80)
Volta 2 -> 08:31.45 (parcial 04:18.65)
Volta 3 -> 12:48.10 (parcial 04:16.65)
Final -> 16:55.30 (parcial 04:07.20 mais rápida)Múltiplos timers para HIIT (30s trabalho / 15s descanso x 4)
Timer A: 00:30 (trabalho) -> alarme
Timer B: 00:15 (descanso) -> alarme
Timer C: 00:30 (trabalho) -> alarme
Timer D: 00:15 (descanso) -> alarme
Sessão total: 3 minutos, mantenha a aba visível para que os alarmes disparem na hora.Fiscalização de prova - bloco de escrita de 45 minutos
Duração : 00 : 45 : 00
Início : 09:15:00
Fim : 10:00:00
Dica: deixe a aba em primeiro plano - abas em segundo plano podem limitar o setInterval e atrasar vários segundos ao longo de 45 minutos.Perguntas frequentes
A contagem regressiva continua se eu trocar de aba?
Os navegadores modernos limitam abas em segundo plano a cerca de 1 atualização por segundo para economizar bateria, então o valor exibido pode atrasar um pouco quando você voltar — mas o cálculo subjacente é baseado em tempo absoluto, então o total decorrido fica correto. A contagem regressiva exibida pula para o valor certo assim que a aba ganha foco.
O alarme dispara quando a aba está em segundo plano?
A reprodução de áudio em abas em segundo plano é restrita por alguns navegadores e por configurações de economia de energia do sistema operacional. O alarme é tocado pela Web Audio API e exige uma interação prévia do usuário. Mantenha a aba em foco ou visível se o alerta for importante.
O que acontece se o computador entrar em modo de suspensão?
A matemática de tempo da contagem regressiva é baseada em Date.now() (relógio do sistema), então ela continua correta enquanto o sistema dormiu. A exibição se ajusta ao despertar. O alarme sonoro, no entanto, não toca enquanto o sistema está suspenso.
Qual a precisão do cronômetro?
A exibição é atualizada a cada segundo, mas internamente a página usa timestamps com precisão de milissegundos. A precisão real é limitada pelo throttling do navegador (abas em segundo plano perdem precisão) e pela latência de saída de áudio do som do alarme (geralmente <100 ms). Para precisão de física ou engenharia de áudio, use hardware especializado.
Posso salvar durações predefinidas?
Botões de presets rápidos (5 min, 10 min, 25 min, 45 min, 1 hora) são oferecidos para durações comuns. São atalhos embutidos, não presets personalizáveis pelo usuário. Fechar a aba perde o estado atual do cronômetro.
E o horário de verão?
A contagem regressiva usa segundos decorridos, não datas do relógio, então transições de horário de verão não a afetam. Uma contagem regressiva de 2 horas iniciada 30 minutos antes da mudança 'spring forward' ainda termina 90 minutos depois, corretamente.
Algo é enviado para algum servidor?
Não. O cronômetro roda inteiramente no seu navegador. Presets personalizados e histórico são armazenados localmente se você optar por isso.