J'essaie de démarrer le compte à rebours Javascript en utilisant le code Javascript suivant. Ici, cela compte à partir de 5-0 .

Maintenant, je veux quand c'est 0 alors j'appellerai une demande Ajax (je sais comment le faire). Mais pour l'instant, je lui ai mis un message d'alerte indiquant que votre session se termine.

Il me montre en permanence le message d'alerte Mais il devrait être une fois!

Voici le code JS:

function startTimer(duration, display) {
    var timer = duration, minutes, seconds;
    setInterval(function () {
        minutes = parseInt(timer / 60, 10)
        seconds = parseInt(timer % 60, 10);

        minutes = minutes < 10 ? "0" + minutes : minutes;
        seconds = seconds < 10 ? "0" + seconds : seconds;

        display.textContent = minutes + ":" + seconds;


        if(timer !== 0 ) {
            --timer;
        } else if( timer == 0 ) {
            alert('Your time has been completed.');
        }
    }, 1000);
}

window.onload = function () {
    var seconds = 5,
        display = document.querySelector('#time');
        startTimer(seconds, display);
};
0
Shibbir 12 avril 2018 à 07:48

3 réponses

Meilleure réponse

Vous devez affecter l'intervalle à une variable, afin de pouvoir ensuite effacer l'intervalle après le alert final afin qu'il ne s'exécute plus:

function startTimer(duration, display) {
  let timer = duration;
  const interval = setInterval(function() {
    let minutes = parseInt(timer / 60, 10)
    let seconds = parseInt(timer % 60, 10);
    minutes = minutes < 10 ? "0" + minutes : minutes;
    seconds = seconds < 10 ? "0" + seconds : seconds;
    display.textContent = minutes + ":" + seconds;
    if (timer !== 0) {
      --timer;
    } else if (timer == 0) {
      alert('Your time has been completed.');
      clearInterval(interval);
    }
  }, 1000);
}

window.onload = function() {
  var seconds = 5,
    display = document.querySelector('#time');
  startTimer(seconds, display);
};
<div id="time"></div>
1
CertainPerformance 12 avril 2018 à 04:53

ES5

function startTimer(duration, display) {

var timer = duration;

var interval = setInterval(function() {
var minutes = parseInt(timer / 60, 10)
var seconds = parseInt(timer % 60, 10);
minutes = minutes < 10 ? "0" + minutes : minutes;
seconds = seconds < 10 ? "0" + seconds : seconds;
display.textContent = minutes + ":" + seconds;
if (timer !== 0) {
  --timer;
} else if (timer == 0) {
  alert('Your time has been completed.');
  clearInterval(interval);
  }
}, 1000);

}

  window.onload = function() {
  var seconds = 5,
  display = document.querySelector('#time');
  startTimer(seconds, display);
};
1
mohsin 12 avril 2018 à 05:10

Vous devez utiliser la méthode clearInterval() comme ci-dessous

var myVar = setInterval(function(){ myTimer() }, 1000);
myTimer() {
  if(conditionMet)
   clearInterval(myVar);
}

Ou simplement pour des informations, vous pouvez utiliser intervalle de réaction js

import { interval } from 'rxjs/observable/interval';

//emit value in sequence every 1 second
const source = interval(1000);
//output: 0,1,2,3,4,5....
const subscribe = source.subscribe(val => {
 if(conditionmet)
   source.unsubscribe(); 
 console.log(val);
});
1
Pranay Rana 12 avril 2018 à 05:04