[ JS ]Faire une pause pendant une fonction

Résolu/Fermé
pols12 Messages postés 1143 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 31 juillet 2019 - 5 déc. 2010 à 11:49
 remjie - 10 oct. 2013 à 02:57
Bonjour,
J'ai une fonction comme ceci :
do{
          switch
     fais une action en fonction de la valeur du switch
     J'aimerais faire une pause ici avant de redémarrer la boucle !
}while()


Comment faire une pause ? J'ai lu que c'était impossible mais j'ai lu qu'on pouvait le faire avec JQuery.
C'est pour un programme personnel, donc aps grave si c'est aps aux normes... ;)

Merci!

8 réponses

avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
5 déc. 2010 à 19:57
Salut.

Je ne suis pas certain d'avoir bien compris le problème.
Tu souhaites tout simplement exécuté le code contenu dans la boucle tous les x temps ?

Tu peux utiliser la fonction setInterval.

Par exemple :
setInterval(function() {

    switch(variable) {
        ...
    }

}, 2000);
2
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
8 déc. 2010 à 18:39
Il faudra utiliser setTimeout à la fin de la fonction.

Voilà un exemple :
var div;

function boucle(vitesse) {
	var millisecondes = null;
	
	switch(vitesse) {
		case 'fast':
			millisecondes = 250;
		break;
		
		case 'slow':
			millisecondes = 1000;
		break;
		
		default:
			millisecondes = 500;
		break;
	}
	
	div.innerHTML += "Ligne ...<br>";
	setTimeout(function() {
		boucle(vitesse);
	}, millisecondes);
}

window.onload = function() {
	div = document.getElementById('div');
	boucle('slow');
};
1
pols12 Messages postés 1143 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 31 juillet 2019 119
9 déc. 2010 à 17:07
Juste une question :
Pourquoi
setTimeout(function() {
		boucle(vitesse);
	}, millisecondes);

Et pas
setTimeout(boucle(vitesse), millisecondes);

??
0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
9 déc. 2010 à 18:28
C'est ainsi qu'il faudrait faire si tu ne souhaites pas utiliser une fonction anonyme :
setTimeout(boucle, millisecondes, vitesse);


https://developer.mozilla.org/fr/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout
0
Utilisateur anonyme
5 déc. 2010 à 12:01
essaie de faire une fonction pause comme ceci et dit moi si ca marche:

function pause()
{
while(1==1)
{
if (xxxxx) //la condition pour que la boucle s'arrete (pour quitter la pause)
{break;}
else { return -1; }
}
}
0
Utilisateur anonyme
5 déc. 2010 à 12:03
je crois que tu peux aussi le faire avec un setTimeout.
0
pols12 Messages postés 1143 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 31 juillet 2019 119
5 déc. 2010 à 12:31
Le problème, c'st que pour la condition, dans ton code, j'aimerais que ce soit un temps, une pause quoi... :P
Si je savais combien de temps la boucle mettait à s'exécuter, je pourrais mettre le nombre d'incrémeñtation, mais bon, une boucle quasi infine, c'est ap super ! :S
0
Utilisateur anonyme
5 déc. 2010 à 17:12
essaie le fonction setTimeout( ), elle prends comme parametre le nombre de secondes, regarde un peu sur google pour voir comment l'utiliser . ^^
0
var maVariable = 0, temp_pause = 1000; //1 sec

setTimeOut(function() {maVariable = 1; }, temp_pause) ;

'Fin bon, j'dit ça, j'dit rien. :)
0
pols12 Messages postés 1143 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 31 juillet 2019 119
5 déc. 2010 à 18:14
Oui, mais le problème avec settimeout, c'est qu'il a 2 paramètres : le temps, Ok. Mais aussi une fonction. C'est à dire que j'ai aps envi qu'il lance une fonction au bout de 2 secondes, mais qu'il reprenne là ou il en était avant la pause.

Mais je viens d'avoir une idée, en écrivant ca.
Si je fais une fonction pause() avec rien dedans, et que je mets un setTimeout(pause(),2000) à la fin du do, là ou je l'ai indiqué dans mon premier poste, ca marche ?

Merci !!

PS : Je teste tout de suite ! :P
0
pols12 Messages postés 1143 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 31 juillet 2019 119
5 déc. 2010 à 18:27
Ca ne marche pas ! :(

En fait, ca exécute la fonction pause au bout de 2 secondes, mais ca n'attend pas d'avoir executé pause() pour terminer d'executer ma fonction prinicpale. :(
Une solution ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pols12 Messages postés 1143 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 31 juillet 2019 119
7 déc. 2010 à 18:59
Ha, revoilà un avion ! :D


Oui c'est ça. Mais je crois qu'il y a un problème. :S Je précise mon code :
function action()
{
var maVariable = 0;
     do
     {
                switch(maVariable)

                fais une action en fonction de la valeur du switch, qui change à chaque incrémentation de maVariable (chaque tour de boucle)

                maVariable++;
     } while ( maVariable < 11 )
}


Le setInterval, il va remettre à Zero maVariable à chaque fois, non ?
Merci !
0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
7 déc. 2010 à 20:00
Il faut seulement mettre ce qu'il y a entre « do { » et « } while (...) »
Donc la valeur de maVariable ne sera pas remise à zéro.
0
pols12 Messages postés 1143 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 31 juillet 2019 119
7 déc. 2010 à 20:34
Ok, mais alors je déclare maVariable en global, c'est ca ?
0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
8 déc. 2010 à 14:06
Oui
0
pols12 Messages postés 1143 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 31 juillet 2019 119
Modifié par pols12 le 8/12/2010 à 18:27
Salut
J'ai enfin réussi !
Merci à Avion-f16
Code :
<script>  
var maVariable = 0;  

setInterval(function action()  
{  
                switch(maVariable)  

                fais une action en fonction de la valeur du switch, qui change à chaque incrémentation de maVariable.  

                maVariable++;  

}, 2000);  
</script>


Merci encore ! :)

EDIT :
Finalement, j'ai encore un petit problème ! :(

Je voudrais modifier le temps de la pause en fonction de la valeure du switch.
C'est possible ?
J'ai créer une var temps_timer en global. Et j'ai mis ceci :
setInterval ( function(){ [...] }, temps_timer ) ;
Ca ne met aps d'erreur. Mais si dans le switch, je change la valeur de temps_timer, le setInterval ne la prend pas en compte et garde la valeur assigné lors de la déclaration. :(
Il y a un moyen pour que le setInterval prenne la VRAIE dernière valeur assigné à temps_timer ?

☼◄►►►↑↑■■■■==##-->···→{([/ Pols12 \])}←···<--##==■■■■↓↓◄◄◄►☼
0
pols12 Messages postés 1143 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 31 juillet 2019 119
8 déc. 2010 à 18:27
up
0
pols12 Messages postés 1143 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 31 juillet 2019 119
9 déc. 2010 à 17:39
Salut
J'ai réussi, grâce à ton code avion-f16.
Bon, je crois cette fois-ci que je n'ai plus de problème... :P
Merci ! :)
0