mdn - reiniciar setinterval javascript
Javascript: ¿le dice a setInterval que dispare solo x cantidad de veces? (5)
¿Es posible limitar la cantidad de veces que se activará setInterval en javascript?
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>
No, tiene que establecer un tiempo de espera que llame a un clearInterval. Esto debería funcionar:
function setTimedInterval(callback, delay, timeout){
var id=window.setInterval(callback, delay);
window.setTimeout(function(){
window.clearInterval(id);
}, timeout);
}
Personalmente prefiero usar setTimeout()
espaciado 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 se requiere clearInterval()
con clearInterval()
Puedes encerrarlo para evitar fugas de 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)
Puedes usar setTimeout y un bucle for.
var numberOfTimes = 20;
delay = 1000;
for (let i = 0; i < numberOfTimes; i++) {
setTimeout( doSomething, delay * i);
}
Puede llamar a clearInterval()
después de x llamadas:
var x = 0;
var intervalID = setInterval(function () {
// Your logic here
if (++x === 5) {
window.clearInterval(intervalID);
}
}, 1000);
Para evitar 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);
}
Luego puede llamar a la nueva función setInvervalX()
siguiente manera:
// This will be repeated every for 5 times with 1 second intervals:
setIntervalX(function () {
// Your logic here
}, 1000, 5);