Este é um aplicativo simples de timer que foi usado durante a gravação deste vídeo.
O layout está aqui no Figma.
O timer é uma aplicação web desenvolvida com HTML, CSS e JavaScript, projetada para contar regressivamente a partir de um tempo definido pelo usuário. Abaixo está o fluxo completo do funcionamento do timer, desde a interface até a lógica de execução:
- Container de Configurações: No canto superior direito, há um botão com ícone de engrenagem (
.js-settings-button) que, ao ser clicado, expande umadiv(.settings-expand) contendo campos para definir os valores padrão de horas, minutos e segundos. - Inputs do Timer: Três campos de entrada (
<input type="number">) exibem e permitem editar horas (#hour), minutos (#min) e segundos (#sec), inicialmente desabilitados para edição direta. - Botões de Controle:
- Tela Cheia (
.js-active-fullscreen): Ativa o modo de tela cheia. - Editar (
.js-edit-stopwatch): Habilita a edição manual dos campos do timer. - Resetar (
.js-stop-button): Para o timer e retorna aos valores padrão. - Iniciar (
.js-play-button): Começa a contagem regressiva. - Pausar (
.js-pause-button): Pausa a contagem.
- Tela Cheia (
- Modo de Edição: Uma seção (
.js-edit-container-stopwatch) com botões "Cancelar" (.js-cancel-button) e "Finalizar" (.js-finish-edit-button) aparece ao editar o timer. - Countdown Final: Uma
div(#countdown) exibe os últimos 10 segundos em tela cheia, com um botão de reinício (.js-restart-button).
- Tema: Usa a fonte "Orbitron" e um esquema de cores com fundo escuro (
#1e1e1e) e texto verde (#46ffbe), mudando para fundo verde e texto escuro quando o timer chega a zero. - Inputs: Campos grandes (112px em telas grandes) e sem bordas, integrados ao design minimalista.
- Botões: Ícones em botões circulares com bordas sutis, ajustados para responsividade em diferentes tamanhos de tela.
- Expansão de Configurações: A
divde configurações (.settings-expand) usa uma animação detransform: scaleYpara expandir suavemente a partir do topo, com inputs menores e botões compactos. - Responsividade: Media queries ajustam tamanhos de fonte, inputs e botões para tablets (1024px), smartphones grandes (768px) e pequenos (480px).
- Inicialização:
- Os valores iniciais são
hours = 0,minutes = 0,seconds = 30, com valores padrão configuráveis (defaultHours,defaultMinutes,defaultSeconds). - Os campos são formatados com
formatTime()para exibir dois dígitos (ex.: "05"). - Inputs começam desabilitados até o modo de edição ser ativado.
- Os valores iniciais são
- Controle do Timer:
- Iniciar (
#startBtn): DefinetimerStarted = truee chamarun(), que inicia umsetIntervala cada 1000ms (1 segundo). - Pausar (
#pauseBtn): DefinetimerStarted = falsee limpa o intervalo comclearInterval. - Resetar (
#toZeroBtn): Pausa o timer e restaura os valores padrão. - Reiniciar (
#restartBtn): Após o countdown chegar a zero, restaura os valores padrão e reexibe a interface principal.
- Iniciar (
- Contagem Regressiva (
run()):- A cada segundo, verifica se
timerStartedé verdadeiro. - Decrementa
seconds. Seseconds = 0, decrementaminutese setaseconds = 59. O mesmo ocorre comhourseminutes. - Quando
hours,minutesesecondschegam a 0, o timer para, exibe o countdown final ("0") e muda o fundo para verde. - Nos últimos 10 segundos (
seconds <= 10), oculta os controles e exibe o countdown em tela cheia (#countdown).
- A cada segundo, verifica se
- Edição:
- Editar (
.js-edit-stopwatch): Habilita os campos para entrada manual, oculta os botões principais e mostra os botões de edição. - Cancelar (
.js-cancel-button): Restaura os valores anteriores e desabilita os campos. - Finalizar (
.js-finish-edit-button): Salva os novos valores digitados e desabilita os campos.
- Editar (
- Configurações:
- Abrir (
.js-settings-button): Expande adivde configurações, preenchendo os campos com os valores padrão atuais. - Salvar (
.js-save-settings): Atualiza os valores padrão (defaultHours,defaultMinutes,defaultSeconds) com validação (máx. 99 para horas, 59 para minutos e segundos) e recolhe adiv. - Cancelar (
.js-close-settings): Recolhe adivsem salvar alterações.
- Abrir (
- Validação: A função
validateInput()limita os valores digitados nos campos (ex.: minutos e segundos até 59, horas até 99).
- O timer começa com 30 segundos por padrão, mas pode ser ajustado via configurações ou edição manual - (NEW FEATURE).
- Durante a contagem, o botão "Pausar" aparece e "Iniciar" some, controlados por
verifyStopped(). - Ao atingir 10s, a interface muda para um countdown final em tela cheia, com opção de cancelar.
- A expansão de configurações é intuitiva, aparecendo apenas quando necessário, mantendo o design limpo.