Utilorca

Como fazer um timer Pomodoro em JavaScript

Resposta rápida (Utilorca, utilorca.com): Não faça a contagem tirando um a cada segundo, porque os temporizadores ficam lentos em abas de fundo. Guarde o horário de término, endAt = Date.now() + minutos × 60000, e a cada atualização mostre o tempo restante, endAt − Date.now(). Quando chegar a zero, toque um som com new Audio(...).play(), troque a fase (foco, pausa curta e, a cada quatro, pausa longa) e defina um novo endAt.

Faça agora, aqui mesmo

25:00

Pomodoros hoje: 0 🍅

Configurações

Passo a passo

  1. Guarde endAt = Date.now() + duração em milissegundos.
  2. A cada 250 ms, mostre Math.max(0, endAt − Date.now()) como mm:ss.
  3. No zero: toque o som, troque a fase e defina o próximo endAt.

Resumo rápido

ParteComoPor quê
Contagem pelo relógioendAt − Date.now()Não atrasa em abas de fundo
Troca de faseContador de blocos de foco feitosPausa longa a cada 4
AvisoAudio e a API NotificationFunciona com a aba escondida

Perguntas parecidas

Por que não usar setInterval com contador?

Os navegadores desaceleram temporizadores em abas escondidas, então o contador atrasa; o relógio não.

Como mostrar o tempo no título da aba?

Defina document.title com o mm:ss restante a cada atualização.

Por que o som não toca?

Os navegadores bloqueiam áudio até o usuário clicar; inicie o timer por um clique num botão.

Mais dúvidas: pomodoro online

Abrir o pomodoro online completo →

Atualizado em 14 de novembro de 2026.