Je veux quelque chose comme ceci en JavaScript. Y a-t-il un javascript intégré ou jQuery pour cela? p> Merci! P> P> P> P> P> P> P> P> P> P> P> P> >
8 Réponses :
Seulement que le Settimeout a besoin d'une fonction de continuation comme argument.
J'ai essayé d'utiliser Settimeout, mais je n'ai pas besoin d'une fonction de continuation.
La continuation est obligatoire si vous voulez un comportement de PHP. Settimeout (Runthisfuncunc (), After1Sec) - Contrairement à PHP, JS n'attend pas qu'une ligne soit complètement terminée jusqu'à ce que le prochain soit exécuté.
Il n'y a rien de tel, directement. Vous devriez dire à JavaScript pour réveiller "quelque chose" après un certain temps en utilisant Ce "quelque chose" serait le code que vous envisagez d'exécuter après em> le Dormir, bien sûr. P> d'un exemple que j'ai trouvé sur Internet : p> mais c'est une conception fragile. Vous feriez mieux de repenser votre logique commerciale à vraiment faire quelque chose em> après une seconde: appelez une fonction différente au lieu d'utiliser ces variables d'assistance intégrées. P> P> Settimeout code>.
première question, pourquoi voulez-vous dormir dans une boucle? Si cela est nécessaire, un système d'événements devrait peut-être être mis en place. J'ai moi-même essayé la tactique de sommeil plusieurs fois pour la programmation javascript filetée de Mutli-fileté et la trouvée ne fonctionne pas bien. La meilleure façon de faire de multi-threading dans JavaScript consiste à utiliser un système d'événements tel que celui fourni par YUI ou presque tout autre cadre. Demandez à votre auditeur vous abonnez à cet événement et faites quelque chose quand cela se produit. Dans ces cadres d'événements, vous avez le contrôle total du moment où votre événement personnalisé incendie donc leur gros problème.
Voici le lien pour le cadre d'événement de Yui. P>
http://developer.yahoo.com/yui/examples/event/index.html p>
Voici comment il pourrait être codé à l'aide de YUI P>
var myObj = { count:0, doSomething:function(){alert(this.count++);} loopFunc:function(){ this.doSomething(); setTimeout('myObj.loopFunc()',1000); } }
Je fais des rappels avec JS aussi, et la seule chose que j'ai apprise est que votre loopfunc soit appelé avec ce code> tout sauf votre
myobj code>. Vous devez un peu stocker le
de ce code> dans une fermeture.
En dehors de cela, votre suggestion d'aller en fonction de l'événement vaut beaucoup!
Le deuxième exemple doit fonctionner car la loopfunc sera exécutée dans la portée de MyOBJ. Cela devrait donc se référer à Myobj, le seul problème que je n'aime pas, c'est que Myobj doit être une variable disponible globalement pour l'exécution de SettimeOut pour le trouver. Pouvez-vous expliquer comment vous entendez par «ceci dans une fermeture»?
J'ai cherché / googlé assez de pages Web sur JavaScript Sleep / Wait ... Et il n'y a pas de réponse si vous voulez que JavaScript soit JavaScript sur "Exécuter, retarder" ... Qu'est-ce que la plupart des gens ont été, "courir, Exécuter (des choses inutiles), courir "ou" courir, courir + Run + Run "....
Alors j'ai mangé des hamburgers et j'ai pensé ::::: Voici une solution qui fonctionne ... mais vous devez bloquer vos codes de course ... ::: p>
// ................. ............................ // Exemple1: P>
<html> <body> <div id="id1">DISPLAY</div> <script> //javascript sleep by "therealdealsince1982"; copyrighted 2009 //setTimeout var i = 0; function run() { //pieces of codes to run, can use switch statement if (i==0){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" ran</p>"; sleep(1000);} if (i==1){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" ran</p>"; sleep(2000);} if (i==2){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" ran</p>"; sleep(3000);} if (i==3){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" ran</p>";} //stops automatically i++; } function sleep(dur) {t=setTimeout("run()",dur);} //starts flow control again after dur run(); //starts flow </script> </body> </html>
function sleep(delay) { var start = new Date().getTime(); while (new Date().getTime() < start + delay); }
Donc, c'était comme il y a 10 ans ... mais pouvez-vous démontrer l'utilisation?
Eh bien, si vous avez installé PHP sur le serveur Web, vous pouvez utiliser $. Charger code> ou similaire pour appeler un fichier php qui n'a que
Sleep (int) code> ... p>
J'ai vu ce commentaire "J'ai essayé d'utiliser Settimeout, mais je n'ai pas besoin d'une fonction de continuation" et pensez, oui, vous faites. Ce que vous n'avez pas besoin, c'est une boucle. Vous avez besoin d'une fonction récursive.
Ceci P>
function recursive( i, max ) { if ( i > max ) return; alert( i ); i = i + 1; setTimeout( function(){ recursive(i, max); }, 1000 ); } recursive(1, 10);
Ceci est plus facile à réaliser ces jours avec l'utilisation de l'utilisation dactylographiée (à l'intérieur d'une fonction async): p> Ici: P>
La première chose que je ferais avant de poster est Stackoverflow.com/search?q=[javascript]cripteur »et Vous pouvez voir qu'il y a déjà beaucoup de solutions
La prochaine chose se demande pourquoi vous avez besoin d'un sommeil et non une solution basée sur des événements comme Zoidberg suggère.