2010-07-19 5 views
3

Exemple simple:javascript show dans le cycle avec un retard

for (var i = 0; i < 10; ++i) { 
    console.log(i); // <--- should be show with delay in 300ms 
} 

setTimeout simple en utilisant bien sûr ne fonctionne pas ... Je pense qu'il ya des fermetures devraient utiliser ..

+0

pas vous faire, quelle est la question? –

+0

impression i ligne par ligne avec retard en 300ms. –

Répondre

4

devrait faire le travail:

for (var i = 0; i < 10; ++i) { 
    (function(i) { 
    setTimeout(function(){console.log(i);}, i*300); 
    })(i); 
} 
+0

Ou '(i + 1) * 300' selon que le premier' i' devrait être imprimé immédiatement ou non. –

+0

Ha !!! Incroyable! i * 300 a été manqué. Merci! –

+1

@Alex, bienvenue. –

6

Il est une simple question d'écriture une fonction récursive:

function display(i) 
{ 
    if (i == 10) return;  
    setTimeout(function(){ console.log(i); display(i+1); }, 300); 
} 
+1

Je suggérerais d'ajouter un deuxième paramètre disons n, puis de remplacer l'instruction if par: "if (i == n)". Juste comme question de généricité. –

+1

Pour des raisons de généricité, j'irais jusqu'à fournir les arguments for-loop traditionnels: initialisation, fonction d'étape et condition: fonction recurse (init, condition, pas) {if (condition (init)) recurse (pas (init), condition, étape); } –

+0

Complètement à droite;) –

3

Vous pouvez utiliser setInterval, comme ceci:

var i = 0; 
var id = setInterval(function(){ 
    if (i == 9) clearInterval(id); 
    console.log(i); 
    i++; 
}, 300); 

Exemple ici http://jsfiddle.net/MLWgG/2/

+0

Il semble que ce que je cherchais, merci) –