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 :

Appel fonction JS unique


Sujet :

JavaScript

  1. #1
    Membre habitué Avatar de Federico_muy_bien
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 154
    Points : 189
    Points
    189
    Par défaut Appel fonction JS unique
    Salut !!!

    Alors je vous avoue que j'ai eu du mal à trouver le titre du sujet et je pense que c'est pour ça que je n'ai pas pu trouver de réponse, c'est parceque je ne vois pas comment décrire mon probléme en quelque mots.

    Je me lance :
    J'ai une application Web avec un menu horizontal (ul) contenant les liens vers les differentes parties de l'application (li --> a)

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <!-- ligne des onglets -->
    	<ul class="onglets">
     
    		<li class="onglets">
    			<a class="onglets" onclick="javascript:logout(); return false;" href="#">&nbsp;Logout</a>
    			<em><img src="../images/lock.png" id="logout" height="25px" alt="#" /><br />Good Bye ...</em>
    		</li>
     
    		<li class="onglets">
    			<a class="onglets" href="../php/home.php">&nbsp;Home</a>
    			<em><img src="../images/home.png" id="home" height="25px" alt="#" /><br />Go to Home</em>
    		</li>
            </ul>

    Au survol du lien (a) une fonction javascript/JQuery est appelé. Elle fait apparaitre un genre d'infobulle personnalisée au dessus du lien avec le code du em suivant ...

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <script type="text/javascript">
    		$(document).ready(function(){
    			$(".onglets a").hover(function() {
    				$(this).next("em").animate({opacity: "show", top: "-90"}, "slow");
    			}, function() {
    				$(this).next("em").animate({opacity: "hide", top: "-105"}, "fast");
    			});
    		});
    	</script>

    Tout marche trés bien mais je me suis aperçu que si je survole rapidement cette zone 10 fois par exemple, la fonctio va etre exécutée 10 fois a la suite même si la souris n'est plus du tout dans cette zone ...

    Donc ce que je voudrais faire c'est qu'un fois la fonction lancée elle ne soit plus "relançable" avant la fin de l'animation ...

    Je ne sais pas si vous avez compris mon probléme.
    Peut être arrété les listener d'evenement mais alors un survol sur un autre onglet ne sera pas pris en compte. Peut on arreter le listener que pour un objet (le li qui est est en cours d'animation ???) ?

    Merci d'avance !!
    Muy Bien

  2. #2
    Membre habitué Avatar de Federico_muy_bien
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 154
    Points : 189
    Points
    189
    Par défaut précisions
    bon alors je me suis surement mal exprimé.

    Ce que je voudrais c'est que lors de l'éxecution de la fonction javascript elle ne soit pas "ré-appelable" pour le même objet (ici l'id de mon <a>).

    Il y aurait-il une fonction existante permettant de tester l'éxecution d'une fonction pour un objet ? Ou un bout de code vérifiant l'id du a pour lequel la fonction est en cours d'éxecution ?

    J'espere m'être mieux exprimé. Je cherche de mon coté mais je ne trouve pas. Je pense pourtant que c'est d'une grande utilité ....

  3. #3
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    il faut que tu ajoutes un boolean , permettant de savoir si l'action est en cours sur l'objet ( exemeple :

    objet.action = true ; // dès que tu lance l'anim

    puis une condition AVANT de lancer l'anim :

    si action est a false on la lance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(objet.action == false){
    }
    et tu remet action a false une fois terminé

  4. #4
    Membre habitué Avatar de Federico_muy_bien
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 154
    Points : 189
    Points
    189
    Par défaut
    Merci LeChomeur
    Je voyais tellement compliqué que je pensais pas à un truc simple ...


    mais ça a beau être simple je n'arrive pas à le mettre en place ... re
    voici le code qui marche mais qui repete l'action
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    	<script type="text/javascript">
                    $(document).ready(function(){
                                    $(".onglets a").hover(function() {
                                                    $(this).next("em").animate({opacity: "show", top: "-90"}, "slow");
                                                    }, function() {
                                                    $(this).next("em").animate({opacity: "hide", top: "-105"}, "fast");
                                                    });
                                                    
                            }
                    });
            </script>

    j'ai essayé de faire ça mais. Je declare un var unique (donc normalement aucune autre li ne peut executer la fonction en meme temps. Je ferai avec l'id specifique quand j'aurai compris le fonctionnement)

    Code html : 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
     
    	<script type="text/javascript">
                    $(document).ready(function(){
                            var action ;
                                    $(".onglets a").hover(function() {
                                            if(action == false){
                                                    action = true ;
                                                    $(this).next("em").animate({opacity: "show", top: "-90"}, "slow");
                                                    }, function() {
                                                    $(this).next("em").animate({opacity: "hide", top: "-105"}, "fast");
                                                    });
                                                    action = false ;
                                            }
                            }
                    });
            </script>

    Du coup la fonction est jamais lancée ...

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2008
    Messages : 215
    Points : 170
    Points
    170
    Par défaut
    Essaye ça pour voir, je ne suis pas du tout sûr du résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    		$(document).ready(function(){
    			var action ;
    				$(".onglets a").hover(function() {
    					if(action != true){
    						$(this).next("em").animate({opacity: "show", top: "-90"}, "slow");
    						}, function() {
    						$(this).next("em").animate({opacity: "hide", top: "-105"}, "fast");
    						action = true ;
    						});
     
    					}
    			}
    		});

  6. #6
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    arf c du jquery ( je rame avec ça ^^ )

    mais l'idée est la

  7. #7
    Membre habitué Avatar de Federico_muy_bien
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 154
    Points : 189
    Points
    189
    Par défaut
    Citation Envoyé par Niki59 Voir le message
    Essaye ça pour voir, je ne suis pas du tout sûr du résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    		$(document).ready(function(){
    			var action ;
    				$(".onglets a").hover(function() {
    					if(action != true){
    						$(this).next("em").animate({opacity: "show", top: "-90"}, "slow");
    						}, function() {
    						$(this).next("em").animate({opacity: "hide", top: "-105"}, "fast");
    						action = true ;
    						});
    						
    					}
    			}
    		});
    Merci mais ça ne marche pas ... je viens de me rendre compte que le if action se termine au niveau de function .. (voir plus haut en rouge ...)
    En fait c'est du JQuery. Le code se compose comme ça :
    document.fonction({fonction1})
    avec function1 = hover.({function1},{function2})
    avec function2 qui se declenche quand function1 est finie ...

    du coup je vois pas mettre le if (action != true) ...

Discussions similaires

  1. Appel fonction php dans code javascript
    Par licorne dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 05/03/2008, 11h55
  2. PB pour Appel fonction dans DLL sur Builder3
    Par Fbartolo dans le forum C++Builder
    Réponses: 15
    Dernier message: 10/03/2005, 13h58
  3. pro c appelle fonction connexion
    Par friends dans le forum Oracle
    Réponses: 3
    Dernier message: 10/05/2004, 18h07
  4. Appels fonctions DLL
    Par Micka91 dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 17/02/2004, 18h32
  5. Appel fonction assembleur en C
    Par grandjouff dans le forum C
    Réponses: 6
    Dernier message: 07/12/2003, 21h43

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