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 :

Javascript, setInterval


Sujet :

JavaScript

  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 148
    Par défaut Javascript, setInterval
    Bonjour,
    J'ai un soucis sur l'une de mes applications Javascript. Au début tout va bien, le code marche pas de soucis, mais d'un seul coup il ne fait plus ce que je lui demande, il excute une fonction ou une action qu'il ne devrait pas.
    Lorsque je fais un Onmousseover, je souhaite faire descendre progréssivement un élément de mon menu.
    De même pour le Onmousseout, qui lui est censé faire remonter cet élément à sa position d'origine.

    Voici mes éléments du menu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <li>
    <a id="PaquesBeau" onmouseover="ExecToggle(this.id);" onmouseout="ExecToggle(this.id);" href="/fr/evenements/paques/beau.shtml" title="à la rencontre du beau" class="beau">à la rencontre du beau</a>
    </li>
    <li>
    <a id="PaquesFete" onmouseover="ExecToggle(this.id);" onmouseout="ExecToggle(this.id);" href="/fr/evenements/paques/fete.shtml" title="vers des destinations conviviales" class="fete">vers des destinations conviviales</a>
    </li>
    Pour ce qui est du javascript j'utilise trois fonctions que voici.

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    var i = Array();
    var position = Array(); 
    function ToggleBottom(ToggleID)
    {
        if(document.getElementById(ToggleID) && i[ToggleID]<30)
        {
            i[ToggleID]+=1;
            document.getElementById(ToggleID).style.top=i[ToggleID]+"px";
     
            if(i[ToggleID] == 30)
            {
                clearInterval(ExecInter);
                position[ToggleID] = "top";
            }
        }
    }
     
    function ToggleTop(ToggleID)
    {
        if(document.getElementById(ToggleID) && i[ToggleID]>0)
        {
            i[ToggleID]-=1;
            document.getElementById(ToggleID).style.top=i[ToggleID]+"px";
            if(i[ToggleID] == 0)
            {  
                clearInterval(ExecInter);  
                position[ToggleID] = "bottom";          
            }
        }
    }
     
    function ExecToggle(ToggleID) 
    {   
        if(position[ToggleID] == null || position[ToggleID] == "bottom")
        {
            i[ToggleID] = 0;
            ExecInter = setInterval(function(){ToggleBottom(ToggleID);}, 25);
        }
        if(position[ToggleID] == "top")
        {
            i[ToggleID] = 30;
            ExecInter = setInterval(function(){ToggleTop(ToggleID);}, 25);
        }
    }
    Si vous pouviez m'aider à faire ne sorte que ce code marche Je ne cherche pas à faire quelque chose de compliqué, mais j'aimerais ne pas utiliser une fonction par élément du menu.

    Merci d'avance

  2. #2
    Membre expérimenté
    Avatar de HumanTool
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 276
    Par défaut
    salut,
    je crois que les appels à setInterval (et setTimeOut) doivent être du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setInterval("MaFonction", 1000);
    le guillemets sont nécessaire.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 148
    Par défaut
    Non étant donné que je passe des paramètres dans ma fonction lors du setinterval, il faut mettre ce que j'ai mis à l'intérieur, cependant j'ai pas mal avancé sur le sujet, maintenant seul firebug arrive à faire marcher la fonction à l'envers.. Magie ? sorcellerie ? je ne saurais y répondre.

    Cependant je pense avoir fait quelque chose de "potable", pas très propre et pas très optimisé, mais le javascript n'est pas mon dada.

    Je post mon javascript
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    var i = Array();
    var position = Array(); 
    var ExecInter = Array();
    var ExecThis = Array();
    var ToggleMax = Array();
    var ToggleMin = Array();
     
     
    /*Fais descendre l'image */
    function ToggleBottom(ToggleID)
    {
        if(document.getElementById(ToggleID) && i[ToggleID]<ToggleMax[ToggleID])
        {
            i[ToggleID]+=1;
            document.getElementById(ToggleID).style.top=i[ToggleID]+"px";
     
            if(i[ToggleID] == ToggleMax[ToggleID])
            {
                clearInterval(ExecInter[ToggleID]);
                ExecThis[ToggleID] = false;  
            }
        }
    }
    /* Fais remonter l'image */
    function ToggleTop(ToggleID)
    {
        if(document.getElementById(ToggleID) && i[ToggleID]>ToggleMin[ToggleID])
        {
            i[ToggleID]-=1;
            document.getElementById(ToggleID).style.top=i[ToggleID]+"px";
            if(i[ToggleID] == ToggleMin[ToggleID])
            {  
                clearInterval(ExecInter[ToggleID]);  
                ExecThis[ToggleID] = false;        
            }
        }
    }
    /* Execution du mouvement de l'image */
    function ExecToggle(ToggleID,ToggleSize) 
    {   
        ToggleMin[ToggleID] = ToggleSize[0];
        ToggleMax[ToggleID] = ToggleSize[1];
     
        if(position[ToggleID] == null || position[ToggleID] == "bottom")
        {
            if(ExecThis[ToggleID] == true)
            {
                clearInterval(ExecInter[ToggleID]);
            }
            else
            {            
                i[ToggleID] = ToggleMin[ToggleID];
                ExecThis[ToggleID] = true;
            }
            position[ToggleID] = "top";
            ExecInter[ToggleID] = setInterval(function(){ToggleBottom(ToggleID);}, 5);
        }
        else if(position[ToggleID] == "top")
        {
            if(ExecThis[ToggleID] == true)
            {
                clearInterval(ExecInter[ToggleID]);
            }
            else
            {            
                i[ToggleID] = ToggleMax[ToggleID];
                ExecThis[ToggleID] = true;
            }
            position[ToggleID] = "bottom";  
            ExecInter[ToggleID] = setInterval(function(){ToggleTop(ToggleID);}, 5);
        }
     
    }

    Merci quand même en espérant que personne n'aura plus ce soucis

  4. #4
    Membre expérimenté
    Avatar de HumanTool
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 276
    Par défaut
    Rien n'empêche de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setInterval("MaFonction(" + MonParametre + ")", 1000);

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 148
    Par défaut
    Ca ne voulait pas marcher non plus, je n'ai pas compris pourquoi, mais la seule fois où ca a marché était la méthode que j'ai utilisé ^^'

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

Discussions similaires

  1. Les meilleurs livres pour apprendre le JavaScript
    Par vermine dans le forum Livres
    Réponses: 23
    Dernier message: 10/06/2019, 18h58
  2. JavaScript<---->ActionScript
    Par crazypiou dans le forum Flash
    Réponses: 21
    Dernier message: 17/04/2009, 17h14
  3. Construire chemin sur bouton avec évt Javascript
    Par Ph. B. dans le forum XMLRAD
    Réponses: 4
    Dernier message: 27/05/2003, 10h26
  4. appel xmlservice via fonction javascript
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 06/05/2003, 14h24
  5. JavaScript de vérification de formulaire
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/02/2003, 13h48

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