Stopwatch using JavaScript

0

I have the following code, the timer works, but when it comes to the end it shows END and restarts. I wanted him to stop at FIM.

var tempo = new Number();
// Tempo em segundos
tempo = 10;

function startCountdown(){

// Se o tempo não for zerado
if((tempo - 1) >= 0){

    // Pega a parte inteira dos minutos
    var min = parseInt(tempo/60);
    // Calcula os segundos restantes
    var seg = tempo%60;

    // Formata o número menor que dez, ex: 08, 07, ...
    if(min < 10){
        min = "0"+min;
        min = min.substr(0, 2);
    }
    if(seg <=9){
        seg = "0"+seg;
    }

    // Cria a variável para formatar no estilo hora/cronômetro
    horaImprimivel = min + ':' + seg;
    //JQuery pra setar o valor
    $("#tempo").html(horaImprimivel);

    // Define que a função será executada novamente em 1000ms = 1 segundo
    setTimeout('startCountdown()',1000);

    // diminui o tempo
    tempo--;

// Quando o contador chegar a zero faz esta ação
} else {
    if (tempo == 0){
    fim = "FIM";
    $("#tempo").html(fim);
    }
}

}

// Chama a função ao carregar a tela
startCountdown();
    
asked by anonymous 15.10.2018 / 05:00

2 answers

1

You could use the return statement, have you heard?

  

Definition: The return statement in javascript terminates the execution of the function and returns the value for each function. If the value is omitted, it will be returned undefined . Source: link

In this case, entering your else and setting the "END" value to your time variable you could add the return statement to stop execution as you wish.

The snippet code would look like this:

. . . else {
    if (tempo == 0){
    fim = "FIM";
    $("#tempo").html(fim);
    return;
    }
}
    
15.10.2018 / 13:17
0

I just inserted a boolean control into the code to identify whether it ended the process or not, creating the variable done . This variable is always checked at the beginning of the counter.

var tempo = new Number();
// Tempo em segundos
tempo = 10;
done = false;

function startCountdown() {

  // Se o tempo não for zerado
  if ((tempo - 1) >= 0 && done == false) {

    // Pega a parte inteira dos minutos
    var min = parseInt(tempo / 60);
    // Calcula os segundos restantes
    var seg = tempo % 60;

    // Formata o número menor que dez, ex: 08, 07, ...
    if (min < 10) {
      min = "0" + min;
      min = min.substr(0, 2);
    }
    if (seg <= 9) {
      seg = "0" + seg;
    }

    // Cria a variável para formatar no estilo hora/cronômetro
    horaImprimivel = min + ':' + seg;
    //JQuery pra setar o valor
    $("#tempo").html(horaImprimivel);

    // Define que a função será executada novamente em 1000ms = 1 segundo
    setTimeout('startCountdown()', 1000);

    // diminui o tempo
    tempo--;

    // Quando o contador chegar a zero faz esta ação
  } else {
    if (tempo == 0) {
      done = true;
      fim = "FIM";
      $("#tempo").html(fim);
    }
  }

}
    
15.10.2018 / 12:55