2010-06-02 21 views

Respuesta

98

Puede llamar clearInterval() después x llamadas:

var x = 0; 
var intervalID = setInterval(function() { 

    // Your logic here 

    if (++x === 5) { 
     window.clearInterval(intervalID); 
    } 
}, 1000); 

Para evitar las variables globales, una mejora de lo anterior sería:

function setIntervalX(callback, delay, repetitions) { 
    var x = 0; 
    var intervalID = window.setInterval(function() { 

     callback(); 

     if (++x === repetitions) { 
      window.clearInterval(intervalID); 
     } 
    }, delay); 
} 

A continuación, puede llamar a la nueva función setInvervalX() como sigue:

// This will be repeated every for 5 times with 1 second intervals: 
setIntervalX(function() { 
    // Your logic here 
}, 1000, 5); 
+0

Hey @DanielVassallo, digo que quiero sólo para borrar el intervalo de la tercera llamada de retorno porque tal vez finalmente pasó algo de lógica; ¿Volverá el salto falso de setIntervalX() o se necesitará un parámetro adicional en alguna parte? Parece que si devuelvo un bool de la devolución de llamada(), puedo saltear el intervalo ... –

+0

Muchas gracias por el útil fragmento de @DanielVassallo –

+0

que está bien. es lo que quiero –

3

No, tiene que establecer un tiempo de espera que llame a clearInterval. Este deberían obras:

function setTimedInterval(callback, delay, timeout){ 
    var id=window.setInterval(callback, delay); 
    window.setTimeout(function(){ 
     window.clearInterval(id); 
    }, timeout); 
} 
+0

Guau, mi respuesta 13 segundos después fue virtualmente * idéntica *. Raro. –

+0

@ T.J. A veces encuentro lo opuesto más extraño: ¡cuando publicamos muchas soluciones diferentes para un problema trivial! –

+0

@ T.J. Crowder: Extraño con las variables locales y las funciones anónimas;) – stagas

0

Esto borrará el intervalo después de 10 llamadas

<html> 
<body> 

<input type="text" id="clock" /> 
<script language=javascript> 
var numOfCalls = 0; 
var int=self.setInterval("clock()",1000); 
function clock() 
    { 
    var d=new Date(); 
    var t=d.toLocaleTimeString(); 
    document.getElementById("clock").value=t; 
    numOfCalls++; 
    if(numOfCalls == 10) 
    window.clearInterval(int); 
    } 
</script> 
</form> 


</body> 
</html> 
1

yo personalmente prefiero usar setTimeout() espaciados a cabo para lograr el mismo efecto

// Set a function to run every "interval" seconds a total of "x" times 
var x = 10; 
var interval = 1000; 

for (var i = 0; i < x; i++) { 
    setTimeout(function() { 
     // Do Something 
    }, i * interval) 
} 

No hay limpia se requiere con clearInterval()

puede encerrarlo para evitar fugas de las variables y se ve bastante limpio :)

// Definition 
function setIntervalLimited(callback, interval, x) { 

    for (var i = 0; i < x; i++) { 
     setTimeout(callback, i * interval); 
    } 

} 

// Usage 
setIntervalLimited(function() { 
    console.log('hit');   // => hit...hit...etc (every second, stops after 10) 
}, 1000, 10) 
Cuestiones relacionadas