Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, questions/réponses pour les FAQ, sources et autres ressources pour la rubrique Web ainsi que ses sous-rubriques.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/07/2007, 09h33   #1
Membre chevronné
 
Avatar de buzzkaido
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2004
Messages : 817
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2004
Messages : 817
Points : 636
Points : 636
Par défaut [SRC] - Sleep - Faire une pause dans une fonction Javascript

Le but de cette source est de pouvoir faire l'equivalent d'un "sleep" dans une fonction javascript.

Pour cela, on divise le traitement en plusieurs etapes, avec une pause entre chaque etape.

Pour effectuer la pause, on utilise la fonction setTimeout qui va lancer l'etape suivante à la fin de la pause :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function fonctionAEtape(etape)
{
    switch(etape)
    {
       case 1 :
           // On fait les actions de l'etape 1
           // Et on fait une pause
          setTimeout("fonctionAEtape(2)",1000);
          break;
       case 2 :
           // On fait les actions de l'etape 2
           // Et on fait une pause
          setTimeout("fonctionAEtape(3)",1000);
          break;
       case 3 :
           // On fait les actions de l'etape 3
           // Et on fait une pause
          setTimeout("fonctionAEtape(4)",1000);
          break;
       case 4 :
           // On fait les actions de l'etape 4
           // Et on c'est fini
          break;
    }
}
Il suffit de lancer l'étape 1 de la fonction : fonctionAEtape(1) et toutes les etapes s'exectueront à la suite, avec une pause entre chaque.

Il est evidemment possible de regler la durée des pauses (fonction setTimeout) et de passer d'une etape 2 à une etape 4, par exemple :

Code :
1
2
3
4
5
6
7
8
9
10
       case 2 :
           // On fait les actions de l'etape 2
           // Si le resulat d'un test est positif :
           // on passe à l'etape 3 après une pause de 2 secondes
           // sinon on retourne à l'etape 1 après une pause d'une seconde
           if (monTest == true)
              setTimeout("fonctionAEtape(3)",2000);
           else
              setTimeout("fonctionAEtape(1)",1000);
          break;
buzzkaido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2007, 09h45   #2
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 119
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 119
Points : 45 280
Points : 45 280
Je rajouterais juste une petite modification pour la clarté.
Il suffit d'avoir différentes fonctions et de les ordonnancer avec ce script:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
<script type='text/javascript'>
function mafonction1(){alert('1')}
function mafonction2(){ alert('2')}
function mafonction3(){alert('3')}
function mafonction4(){alert('4')}
 
function fonctionAEtape(etape) {  
        switch(etape)  {  case 1 : mafonction1(); 
                                            setTimeout(function(){fonctionAEtape(2)},10000);
                                            break;
                                case 2 : mafonction2();
                                            setTimeout(function(){fonctionAEtape(3)},10000);
                                            break;
                                case 3 : mafonction3();
                                            setTimeout(function(){fonctionAEtape(4)},10000); 
                                            break;
                                case 4 : mafonction4()
                                            break;
                            }
       }
</script>       
</head>
 
<body onload="fonctionAEtape(1)">
 
</body>
 
</html>

si la tempo est constante ça peut se réduire à :

Code :
1
2
 var FuncArray=new Array('mafonction1','mafonction2','mafonction2','mafonction3')
		for(i=0;i<FuncArray.length-1;i++){setTimeout(function(){window[FuncArray[i]]()},i*5000)}
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2007, 13h06   #3
Expert Confirmé
 
Avatar de FremyCompany
 
Étudiant
Inscription : février 2006
Messages : 2 532
Détails du profil
Informations personnelles :
Âge : 20

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2006
Messages : 2 532
Points : 2 903
Points : 2 903
Envoyer un message via MSN à FremyCompany
Peut-être aussi un test à chaque étape, un gestion des arguments et un callBack ?
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function stepFunction(args, onFinalStepCalled, onAbort, etape) {  
  try {
    switch (etape) {
       case window["@Undefined"]:
       case 0:
         /* Traitement : 1e étape */
         setTimeout(function () {
              stepFunction(args, onFinalStepCalled, onAbort, 1)
         }, 10000)
         return true;
       case 1:
         /* Test de type 1 : Si faux, patientez */
         if (typeof document.getElementById('x') == "undefined") {
             setTimeout(function () {
                 stepFunction(args, onFinalStepCalled, onAbort, 1)
             }, 500)
         }
         /* Traitement : 2e étape */
         setTimeout(function () {
              stepFunction(args, onFinalStepCalled, onAbort, 2)
         }, 10000)
         return true;
       case 2:
         /* Test de type 2 : si faux, stopper le traitement */
         if (!document.getElementById('x').firstChild) {
            try { onAbort(2, args) } catch (ex) {}
            return false;
         }
         /* Traitement : 3e étape */
         try { onFinalStepCalled(2, args) } catch (ex) {}
    }
  } catch (ex) {
     onAbort(etape?etape:0, args);
  }
}
Exemple d'appel :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
stepFunction(
  /* args = */ {
     id: "anID",
     name: "aName"
  },
  function(step, args) {
     alert("OK !");
  },
  function(step, args) {
     alert("L'étape " + step + " a échoué. \n\nL'ID était : '" + args.id + "'");
  },
  0
)
__________________
Fremy
Pour vos développements Web et une navigation agréable, le tout gratuit :
1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey
FremyCompany est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h12.


 
 
 
 
Partenaires

Hébergement Web