1
resposta

Reiniciar Contagem

Olá boa tarde!

Não sei se foi abordado no curso ou se eu acabei pulando, mas quando o temporizador chega a zero o beep e o alert disparam, mas não da para reiniciar o temporizador de volta a 25 pois esta em 0 e quando você clica em começar ele só fica tocando o beep e mostrando o alert. Tentei resolver alterando as funções em alguns parâmetros, mas não deu certo.

Uma outra questão é quando o tempo já esta em andamento e alteramos para Descanso curto e longo, esses também ativam o temporizador, tentei achar alguma forma de se mudar o tema o tempo ser resetado ao inicio, mas não consegui.

Alguém pode me ajudar?

1 resposta

Oi, André! Tudo bem?

Muito interessantes esses pontos que você trouxe! Para te ajudar na implementação destas funcionalidades, irei separar minha explicação em duas etapas. Vamos lá?

Reiniciar temporizador

Na função contagemRegressiva(), podemos adicionar uma lógica dentro da estrutura condicional que verifica se tempoDecorridoEmSegundos é menor ou igual a zero. Após tocar a música, apresentar o alert e executar a função zerar(), podemos:

  • Resgatar o valor de data-contexto, que distingue cada um dos nossos botões;

  • Usá-lo em uma estrutura de switch-case para analisar se estamos em "foco", "descanso curto" ou "descanso longo" e, desta maneira, atualizar o valor de tempoDecorridoEmSegundos.

Observe abaixo um código de exemplo:

const contagemRegressiva = () => {
    if(tempoDecorridoEmSegundos <= 0){
        audioTempoFinalizado.play()
        alert('Tempo finalizado!')
        zerar()
        let contexto = html.getAttribute('data-contexto');
        switch (contexto) {
            case 'foco':
                tempoDecorridoEmSegundos = 1500;
                break;
            case 'descanso-curto':
                tempoDecorridoEmSegundos = 300;
                break;
            case 'descanso-longo':
                tempoDecorridoEmSegundos = 900;
                break;
        }
        mostrarTempo()
        return
    }
    tempoDecorridoEmSegundos -= 1
    mostrarTempo()
}

Dentro de cada case, trabalhamos com uma seção diferente, de modo a atualizar corretamente os seus respectivos tempos.

Ao trocar de seção, "resetar" para o Início

Para realizar esse objetivo, basta adicionar a função zerar() toda vez que clicamos em um dos botões que nos leva a uma seção diferente ("foco", "descanso curto" e "descanso longo"), assim:

focoBt.addEventListener('click', () => {
    zerar()
    tempoDecorridoEmSegundos = 1500
    alterarContexto('foco')
    focoBt.classList.add('active')
})

curtoBt.addEventListener('click', () => {
    zerar()
    tempoDecorridoEmSegundos = 300
    alterarContexto('descanso-curto')
    curtoBt.classList.add('active')
})

longoBt.addEventListener('click', () => {
    zerar()
    tempoDecorridoEmSegundos = 900
    alterarContexto('descanso-longo')
    longoBt.classList.add('active')
})

Espero que essas dicas sejam proveitosas para você, André! Sinta-se confortável para explorar essas ideias e customizá-las!

Caso tenha ficado com alguma dúvida, estarei aqui para conversarmos!

Abraços.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!