Mettre en pause un code javascript
Discutez d'informatique ici !
-
Rockleader
- Habitué(e)
- Messages: 2126
- Enregistré le: 11 Oct 2011, 18:42
-
par Rockleader » 26 Mar 2015, 21:01
Hello,
je cherche à faire une pause dans l'exécution d'une fonction.
Pour cela j'ai utilisé setTimeout...sauf que c'est pas bon ça fait simplement un timer sur la fonction sujette à setTimeout et le reste du code s'exécute comme si de rien n'était...
J'ai lu quelque part que ce n'était pas possible de faire cela en javascript mais j'ai du mal à y croire...il doit bien exister une méthode quelconque.
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !
-
WillyCagnes
- Membre Transcendant
- Messages: 3753
- Enregistré le: 21 Sep 2013, 19:58
-
par WillyCagnes » 26 Mar 2015, 21:21
-
fatal_error
- Modérateur
- Messages: 6610
- Enregistré le: 22 Nov 2007, 12:00
-
par fatal_error » 26 Mar 2015, 22:36
salut,
setTimeout est ton amie.
à toi de designer ton code de manière à reprendre l'exécution une fois que le timeout est effectué.
la vie est une fête

-
Rockleader
- Habitué(e)
- Messages: 2126
- Enregistré le: 11 Oct 2011, 18:42
-
par Rockleader » 26 Mar 2015, 22:55
Ben; c'est ce que j'ai essayé de faire là mais jme bouffe une boucle infini je pense.
- Code: Tout sélectionner
//dessine un cercle de centre x,y
function circle(x,y,context)
{
context.beginPath();
context.lineWidth="1";
context.arc(x,y,10, 0, 2 * Math.PI);
context.stroke();
}
- Code: Tout sélectionner
functiontest(x,y)
{
var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
var duree=500;
while(y<250)
{
setTimeout(function(){circle(x,y,context);},duree);
setTimeout(function(){duree=duree+100;},duree);
setTimeout(function(){context.clearRect(x-11,y-11,22,22);},duree);
setTimeout(function(){y=y+20;},duree);
}
}
L'idée ici serait de dessiner un cercle
0.1 s après j'efface ce cercle et je change la position de mon cercle.
Sauf que rien ne s'affiche avec ça^^
L'idée au final c'est d'arriver à bouger un objet de façon assez fluide...
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !
-
fatal_error
- Modérateur
- Messages: 6610
- Enregistré le: 22 Nov 2007, 12:00
-
par fatal_error » 26 Mar 2015, 23:05
- Code: Tout sélectionner
while(y<250)
{
setTimeout(function(){circle(x,y,context);},duree) ;
setTimeout(function(){duree=duree+100;},duree);
setTimeout(function(){context.clearRect(x-11,y-11,22,22);},duree);
setTimeout(function(){y=y+20;},duree);
}
}
refactorise trivialement en
- Code: Tout sélectionner
while(y<250)
{
setTimeout(function(){
circle(x,y,context);
duree=duree+100;
context.clearRect(x-11,y-11,22,22);
y=y+20;
},duree);
}
}
puis refactorises encore trivialement en
- Code: Tout sélectionner
function plotCircle(){
circle(x,y,context);
duree=duree+100;
context.clearRect(x-11,y-11,22,22);
y=y+20;
}
while(y<250)
{
setTimeout(plotCircle,duree);
}
}
puis comme tu veux incrémenter t'as qu'à faire une "récursive"
- Code: Tout sélectionner
function plotCircle(){
if(y < 250){
circle(x,y,context);
duree=duree+100;//est-ce vraiment désiré?
context.clearRect(x-11,y-11,22,22);
y=y+20;
window.setTimeout(plotCircle, duree);
}
}
j'ai pas fait gaffe à la portée des variables durée etc mais c'est du détail ca
la vie est une fête

-
Rockleader
- Habitué(e)
- Messages: 2126
- Enregistré le: 11 Oct 2011, 18:42
-
par Rockleader » 26 Mar 2015, 23:29
L'incrémentation de durée c'est parce que j'avais remarqué que mes timeout se lançait en simultané.
Mais du coup avec ta méthode il n'y a plus besoin.
Je vais essayer de factoriser ça.
Je pensais que timeout n'autorisait qu'une fonction ou une instruction et non un ensemble d'instruction.
J'espère que cela réglera mon problème d'affichage !
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !
-
Rockleader
- Habitué(e)
- Messages: 2126
- Enregistré le: 11 Oct 2011, 18:42
-
par Rockleader » 27 Mar 2015, 02:08
J'ai ajusté quelques variables et ça marche comme sur des roulettes :zen:
Merci beaucoup je commençais à désespérer !
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités