Como faço para parar um window.setInterval em javascript?

Eu tenho uma function javascript que é chamada a cada 2000 ms. Eu quero parar isso para que o usuário faça outras coisas na página sem que seja chamado novamente. Isso é possível? Aqui está a function que é chamada a cada 2000 ms:

window.setInterval(function getScreen (sid) { if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("refresh").innerHTML=xmlhttp.responseText; } } xmlhttp.open("POST","getScreen.php?sid="+,true); xmlhttp.send(); },2000); 

   

Não há nenhuma function de “pausa” interna, mas você pode pará-lo e iniciar um novo intervalo com a mesma function.

Primeiro, você precisa capturar o id retornado pela chamada para setInterval :

 var intervalId = window.setInterval(...); 

Então quando você quiser parar, ligue

  window.clearInterval(intervalId); 

No seu caso, eu sugiro definir setScreen por si só, e não dentro da chamada para setInterval . Dessa forma, você pode usar apenas intervalId = window.setInterval(setScreen, 2000) quando quiser continuar.

Se você estiver usando jQuery eu recomendaria o plugin jQuery Timer

 var timer = $.timer(function() { alert('This message was sent by a timer.'); }, 2000, true); 

Então você pode facilmente pausar o timer:

 timer.pause(); 

E também continue:

 timer.play(); 

É mais fácil fazer isso usando window.setTimeout() vez de window.setInterval() . O seguinte é adaptado da minha resposta aqui .

Demonstração ao vivo: http://jsfiddle.net/timdown/Hkzex/

Código:

 function RecurringTimer(callback, delay) { var timerId, start, remaining = delay; this.pause = function() { window.clearTimeout(timerId); remaining -= new Date() - start; }; var resume = function() { start = new Date(); timerId = window.setTimeout(function() { remaining = delay; resume(); callback(); }, remaining); }; this.resume = resume; this.resume(); } 

Você não pode pausar um intervalo, mas pode pará-lo e reiniciá-lo.

 var timer = setInterval(xx,tt); // then some time later clearInterval(timer); 

Você só precisa capturar o valor de retorno de setInterval() e chamar clearInterval() quando quiser interrompê-lo.

A outra maneira de fazer uma repetição que você pode parar de repetir a qualquer momento é fazer um setTimeout() e depois clearTimeout() repetidos para parar o próximo timer ou simplesmente não iniciar o próximo setTimeout() .

Não re-declarar nada

Basta adicionar uma class que diga ao intervalo para não fazer nada. Por exemplo: em foco.

 var i = 0; window.setInterval(function() { //declare new function if(!$('#counter').hasClass('pauseInterval')) { //only run if it hasn't got this class 'pauseInterval' $('#showCount').html(i++); //just for explaining and showing } }, 500); $('#counter').hover(function() { //mouse enter $(this).addClass('pauseInterval'); $('#counting').text('Stopped counting...'); },function() { //mouse leave $(this).removeClass('pauseInterval'); $('#counting').text('Counting...'); } ); 
   
Counting... |
 var intervalId = window.setInterval(code); window.clearInterval(intervalId);