Boa noite Rogério, eu fiz umas pequenas modificações aqui pra funcionar.
Primeiro eu coloquei os tempos em uma constante para poder reutilizar elas e criei uma variável que vai me informa qual o tempo que está sendo utilizado, jaja você vai entender o motivo.
const tempo = {
foco: 1500,
curto: 300,
longo: 900,
}
let tempoSelecionado = 'foco'; // <-- tempo sendo utilizado
// agora informa assim os tempos
let tempoDecorridoEmSegundos = tempo.foco;
focoBt.addEventListener('click' , () => {
tempoDecorridoEmSegundos = tempo.foco;
alterarContexto('foco');
focoBt.classList.add('active');
})
curtoBt.addEventListener('click' , () => {
tempoDecorridoEmSegundos = tempo.curto;
alterarContexto('descanso-curto');
curtoBt.classList.add('active');
})
longoBt.addEventListener('click' , () => {
tempoDecorridoEmSegundos = tempo.longo;
alterarContexto('descanso-longo');
longoBt.classList.add('active');
})
Na função alterarContexto eu adicionei uma linha para informa qual time esta sendo utilizado:
function alterarContexto(contexto) {
tempoSelecionado = contexto.split('-')[1] || contexto;
...
}
Depois eu adicionei modifiquei a função zerar e aqui que eu utilizo a var que informa qual tempo esta sendo usado:
function zerar() {
tempoDecorridoEmSegundos = tempo[tempoSelecionado];
mostrarTempo()
clearInterval(intervaloId);
iniciarOuPausarBt.textContent = "Começar";
simboloPause.setAttribute('src', `./imagens/play_arrow.png`)
intervaloId = null;
}
Pronto problema resolvido, o problema ocorria pois quando chegava na função contagemRegressiva, como o tempo não era setado nomavemente, ele entrava no loop infinito.