Page 1 sur 1
faire une pause en javascript
Publié : 17 mars 2005, 21:22
par arno.
Bonjour,
dans un programme en javascript, je voudrais faire une pause.
J'ai pas mal cherché et je n'ai trouvé que deux méthodes :
setTimeout(); mais qui ne me convient pas parceque dans ce cas, la commande est déclenchée avec du retard, mais le pg continue son exéctution.
et
Code : Tout sélectionner
* function mapause(time){
* d=new Date();
* while(1){
* n=new Date();
* diff=n-d;
* if diff > time
* break;
* }
*
* }
qui est assez moche parceque pendant ce temps y'a le processeur qui fait des calculs inutiles.
alors ma question :
existe-t-il un moyen de faire une
vraie pause en javascript ?
merci beaucoup.
Publié : 17 mars 2005, 22:42
par Invité
tu mets dans la fonction appelée par setTimeOut le reste du code à executer après la pause

Publié : 17 mars 2005, 22:54
par arno.
Anonymous a écrit :tu mets dans la fonction appelée par setTimeOut le reste du code à executer après la pause

En fait, j'aimerais bien faire la pause à l'intérieur d'une fonction que j'appelle en boucle.
mettons:
Code : Tout sélectionner
for (var i = 0; i < lambda; i++) faitqqc();
...
...
...
faitqqc : function () {
bla;
bla;
//ici je veux ma pause;
}
j'ai essayé de mettre return dans le setTimeout, mais ça marche pas

Publié : 18 mars 2005, 00:02
par Blustuff
Je n'ai pas entendu parler d'une telle fonction. Il manque énormément de fonction au Javascript, il faut essayer de s'adapter. Dans votre cas, il n'y a pas vraiment de difficultés pour vous adapter :
Code : Tout sélectionner
faitqqc();
...
faitqqc : function () {
bla;
bla;
setTimeout("fatiqqc()", 1000); // Pause d'une seconde
}
en espérant que votre programme est bien sous ce genre de schéma : ) L'inconvénient majeur, c'est que dans votre fonction appellante, l'execution continuera après le premier appel. Les autres appels se feront ensuite.
Publié : 18 mars 2005, 00:16
par arno.
merci pour les réponses, mais justement j'ai déjà essayé pas mal de choses pour l'adapter, mais je n'ai rien trouvé. Plus je me plonge dans le javascript, plus j'ai l'impression effectivement qu'il manque des choses.
Mon schéma en fait est celui-ci:
Code : Tout sélectionner
f1 : function () {
if (...) {
...
for (..) faitqqc();
}
if (...) {
....
for (...) faitqqc();
}
etc....
}
et la fonction f1 est appelée par un clic de souris, c'est pour faire une animation. Mon idée c'est de faire une animation de plusieurs éléments qui disparaissent (c'est à ça que sert la fonction faitqqc()). Mais où que je mette le settimeout, le programme continue et du coup tout ce que j'arrive à obtenir, c'est une pause de 1sec avant que tous les éléments ne disparaissent d'un coup

Publié : 18 mars 2005, 03:17
par Invité
bin alors utilise setinterval... ça fait la mêm ch ke settimeout ms en répèt.
et + besoin du for.
ps. clearinterval est précieuse pr pouvoir stopé c'te fct ...

Publié : 18 mars 2005, 11:14
par arno.
merci je vais regarder setinterval et puis continuer à réfléchir à settimeout. Comme en plus ma fonction faitqcc-) a des paramètes, j'ai l'impression que ça va pas être évident. c'est quand même dommage que y'ait pas une vrai fonction pause() dans ce langage !
Publié : 18 mars 2005, 13:02
par Blustuff
La solution que je vous ai donnée fait la même chose que SetInterval. Cette dernière fonction est plus pratique lorsque ce sont des mêmes appels répétés, mais est d'une version plus récente de JAvaScript, donc un tout ptit peu moins supportée par les vieux navigateurs.
Code : Tout sélectionner
f1 : function ()
{
if (...)
{
...
faitqqc(arg1, ..., argn);
}
if (...)
{
....
faitqqc(arg1, ... argn);
}
}
...
faitqqc : function (arg1, ..., argn)
{
bla;
bla;
setTimeout('faitqqc(' + arg1 + ',' + ... + ',' + argn +')', 1000);
}
Publié : 18 mars 2005, 17:25
par maxxfly
Code : Tout sélectionner
function sleep(t)
{
var compteur = 0;
var brocoli = setInterval('compteur++', 1000);
while(compteur != t)
{
// on boucle dans le vide
}
clearInterval(brocoli);
return 1;
}
sleep(10); // une pause de 10 secondes
et pourquoi pas un truc comme ca???
(j'ai pas teste, c juste une idee en l'air)
Publié : 18 mars 2005, 17:41
par Blustuff
La fonction ne marchera pas parce que compteur est locale (boucle infinie) et parce que le navigateur sera "bloqué" pendant une seconde. (Firefox et IE tournent en 100% CPU)
Publié : 18 mars 2005, 17:43
par maxxfly
ouep, t'as raison
voir que FF pleure un peu en disant qu'une fonction se bad trip sur elle meme
sorry
Publié : 18 mars 2005, 17:51
par Blustuff
FF est quand même mieux que IE, au bout d'un moment il dit "He ho ! le script dure trop longtemps là !"
Publié : 18 mars 2005, 18:55
par arno.
après mûre réflexion, il apparait que je ne veux plus faire d'animation dans mon programme.
Désolé du dérangement,
merci pour vos réponses, je prends bonne note de tous ces conseils au cas où j'en aurais rebesoin ultérieurement.