IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[AJAX] settimeout qui attend pas assez


Sujet :

JavaScript

  1. #1
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut [AJAX] settimeout qui attend pas assez
    Bonjour

    Je viens de faire une petite fonction avec un timeout mais il atttends pas dans la boucle et je comprends pas pourquoi.

    Lorsque je lance la page, je vois 20 fois une alert avec OK, puis ensuite 20 fois une alert avec OKFON et mon image qui descend.
    Mais ce que je voudrais avoir une alert avec OK, une alert avec OKFON et l'image qui descend d'un cran et çà répété 20 fois.

    Pouvez vous m'aider ?

    Merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <html><head></head>
    <body>
    <SCRIPT LANGUAGE="javascript">
    var hautimage = 100;
    var gaucheimage = 100;
    document.write('<IMG SRC="1.gif" ID=smile STYLE="position:absolute;top:'+hautimage +';left:'+gaucheimage+'">');
    for (i=1; i<20; i++) {
    setTimeout("bouge(i,i)",1000);
    alert('ok');
    } 
     
    function bouge(x,y)
        {
    alert('okfon');
        if(document.getElementById)
            {
            hautimage += y;
            gaucheimage += x;
            document.getElementById("smile").style.top = hautimage;
            document.getElementById("smile").style.left = gaucheimage;
            }
        }
     
    </SCRIPT>
     
    <!--<img src="1.gif">
    <img src="2.gif">
    <img src="3.gif">-->
    </body></html>

  2. #2
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    setTimeout lance un timer... il n'attends pas que la fonction soit exécutée pour continuer...

  3. #3
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    ah, d'accord, je comprends mieux.

    Mais alors, est ce qu'il y a une commande qui permet de faire une attente, comme WAIT en VB.

    Merci pour ton aide et bonne année.

  4. #4
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Oui, c'est setTimeout ou setInterval

    Pour ton problème, l'idée serait plutôt de relancer le timer toutes les secondes, et ce 20 fois d'affilée.

    Pour relancer le timer automatiquement : il suffit de ré-appeler setTimeout depuis la callback.

    Pour limiter le nombre de rappel à 20 fois, il faut disposer d'un compteur. Soit comme variable globale, soit (plus propre en général) comme variable statique pour la fonction de rappel (la callback).

    Par exemple (avec une variable statique) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <div id="idLaunch"></div>
    <script language="javascript">
    function launch()
    {
    	var d = document.getElementById( "idLaunch" );
    	d.appendChild( document.createTextNode( "+" + launch.cpt ) );
    	if ( ++ launch.cpt < 20 ) {
    		setTimeout( launch, 1000 );
    	}
    }
    launch.cpt = 0;
    </script>
    <input type="button" onclick="launch();" value="launch">

  5. #5
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci beaucoup pour ton aide.
    J'ai mis un peu de temps à réagir car dérangé par un autre projet urgent.

    çà marche bien mais j'ai d'autres soucis. Je vais ouvrir un autre topic pour çà.

    Encore merci

  6. #6
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    bon, en fait j'ai parlé trop vite car j'ai un autre souci, mais là j'ai esssayé de refaire le même schéma et j'ai pas réussi.

    La fonction est un peu plus complexe car il faut faire bouger 22 images en même temps.

    dés que je fais bouger plus de 5 images, çà sacade et à 22 çà fait deux sauts et pouf, c'est la fin. Je ne vois pas bien comment je peux rendre le mouvement plus fluide.

    Petit détail : l'ID de mes images étant img + un chiffre, c'est pour çà que je fais un For pour déterminer l'ID de l'image à bouger.
    Autre détail : le IF (i < 12) c'est jsute pour l'exemple, par la suite il va être beacuou plus complxex car chaque image doit prendre un chemein aléatoire avant d'arriver au même point, les unes sur les autres.

    Merci pour votre aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <script language="javascript">
    function launch()
    {
        var i;
        for (i=1; i<23; i++) 
        {
            var im = 'Img'+i;
    	    var hautimage = parseInt(document.getElementById(im).style.top);
            var gaucheimage = parseInt(document.getElementById(im).style.left);
            if (i < 12) 
            {
                hautimage += 1;
                gaucheimage += 1;
            }
            else
            {	        
                hautimage += 1;
                gaucheimage += -1;
            }
                document.getElementById(im).style.top = hautimage;
                document.getElementById(im).style.left = gaucheimage;
     
    	    if ( ++ launch.cpt < 40 ) {
    		    setTimeout( launch, 100 );
    	    }
        }
    }
    launch.cpt = 0;
    </script>

  7. #7
    Membre chevronné
    Avatar de Eric Berger
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2002
    Messages : 346
    Par défaut
    Je crois que ton setTimout n'est pas au bon endroit, il devrait se trouver à l'extérieur du for, car en étant à l'intérieur du for, chaque appel à la fonction launch créé i appels à la fonction launch (à travers des setTimout) et ce n'est pas ce que tu veux...

  8. #8
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    oauh, trop d'la balle.

    çà marche d'enfer.

    Merci beaucoup pour ton aide.

    Maintenant il ne me reste plus qu'à inventer une formule complqiuée pour faire un mouvement alléatoire et désynchronisé de chaque image. Bon, ben je vais aller chercher un matheu.

    Encore merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 19/11/2008, 09h09
  2. [AJAX] Function Ajax qui marche pas
    Par iwf-fr dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 29/05/2007, 20h42
  3. Une fonction settimeout qui s'execute pas
    Par stepon dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/08/2006, 11h55
  4. [AJAX] Script qui plante IE mais pas Firefox
    Par Booyakha dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 31/05/2006, 18h40
  5. [AJAX] page qui ne s'affiche pas
    Par loka dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 25/04/2006, 11h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo