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!