faire une pause en javascript

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
Répondre
arno.
Varan
Messages : 1347
Inscription : 19 août 2004, 12:26

faire une pause en javascript

Message 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.
Dernière modification par arno. le 17 mars 2005, 23:24, modifié 1 fois.
Invité

Message par Invité »

tu mets dans la fonction appelée par setTimeOut le reste du code à executer après la pause :wink:
arno.
Varan
Messages : 1347
Inscription : 19 août 2004, 12:26

Message par arno. »

Anonymous a écrit :tu mets dans la fonction appelée par setTimeOut le reste du code à executer après la pause :wink:
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 :(
Blustuff
Gecko
Messages : 51
Inscription : 15 mars 2005, 01:10

Message 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.
arno.
Varan
Messages : 1347
Inscription : 19 août 2004, 12:26

Message 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 :cry:
Invité

Message 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 ... :wink:
arno.
Varan
Messages : 1347
Inscription : 19 août 2004, 12:26

Message 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 !
Blustuff
Gecko
Messages : 51
Inscription : 15 mars 2005, 01:10

Message 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);
}
maxxfly
Salamandre
Messages : 30
Inscription : 17 févr. 2004, 14:32

Message 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)
Blustuff
Gecko
Messages : 51
Inscription : 15 mars 2005, 01:10

Message 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)
maxxfly
Salamandre
Messages : 30
Inscription : 17 févr. 2004, 14:32

Message par maxxfly »

ouep, t'as raison
voir que FF pleure un peu en disant qu'une fonction se bad trip sur elle meme

sorry
Blustuff
Gecko
Messages : 51
Inscription : 15 mars 2005, 01:10

Message 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à !"
arno.
Varan
Messages : 1347
Inscription : 19 août 2004, 12:26

Message 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.
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Semrush [Bot] et 2 invités