2011-12-07 16 views
16
setInterval(function(){}, 200) 

questo codice esegue la funzione ogni 200 millisecondi, come faccio se voglio solo che la funzione venga eseguita 10 volte.grazie per aiuto.setInterval con tempo di ciclo

risposta

53

utilizzare un contatore che incrementa ogni volta che il callback viene eseguito, e quando raggiunge il numero desiderato di esecuzioni, utilizzare clearInterval() per uccidere il timer:

var counter = 0; 
var i = setInterval(function(){ 
    // do your thing 

    counter++; 
    if(counter === 10) { 
     clearInterval(i); 
    } 
}, 200); 
+0

3 segni di uguaglianza? –

+1

@JeffreySweeney http://stackoverflow.com/questions/359494/javascript-vs-does-it-matter-which-equal-operator-i-use – vcsjones

+0

grande ... sembra una buona soluzione. – bingjie2680

6
(function(){ 
var i = 10; 
    (function k(){ 

     if(--i) { 
     setTimeout(k, 200); 
     } 

    })() 
})() 
+1

+1 per usare 'setTimeout' invece di' setInterval'. Io probabilmente andare con 'var i = 10' e' se (i -) ', ma questo è solo me :-) –

+0

@AndyE, lol grazie. E 'ancora più bello ora – Esailija

2

se si desidera che venga eseguito per 10 volte e il tempo dovrebbe funzionare è ogni 200 millisecondi poi 200x10 = 2000

var interval = setInterval(yourfunction, 200); 
setTimeout(function() { 
    clearInterval(interval) 
}, 2000); 

ma funziona solo 9 volte per cui dobbiamo aggiungere altri 200 millisecondi

var interval = setInterval(yourfunction, 200); 
setTimeout(function() { 
    clearInterval(interval) 
}, 2200); 

o si potrebbe eseguire prima del setInterval

yourfunction(); 
var interval = setInterval(yourfunction, 200); 
setTimeout(function() { 
    clearInterval(interval) 
}, 2000); 
+0

So che la sua non è sicuro, ma, la cosa è l'idea alla base del codice non come il suo fare dispiace il mio cattivo inglese – shadownrun

+0

Suggerisco di non prendere il commento allarmante di cui sopra non troppo sul serio, ma passando generalmente una funzione è preferito . Non vale niente che passare per stringa sia * un comportamento diverso * (cioè cerca la funzione nell'ambito globale) e tutto ciò che è supportato nei browser più vecchi. –

+0

Mi piace questa soluzione. L'unica cosa che si dovrebbe prevedere la chiara è variabile per i tempi di esecuzione, e passare il moltiplicano come secondo parametro al 'setTimeout()'. –

Problemi correlati