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

jQuery Discussion :

Besoin d'aide pour simplifier fonction


Sujet :

jQuery

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Par défaut Besoin d'aide pour simplifier fonction
    Bonjour, je suis en train d'effectuer un menu avec Jquery.

    cela fonctionne bien pour le moment, j'affiche et je cache des divs avec la propriété display.
    Ma fonction commence à être longue et j'aurais besoins de savoir s'il était possible d'effectuer une simplification de ma fonction. Voici mon code Jquery, je ne pense pas que le reste soit utilie :

    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    //SOUS-MENU//
     
    $(document).ready(function() {
     
    	   	//initialisation
    		$('#subnav-labos').css('display', 'none');
    		$('#subnav-promotions').css('display', 'none');
    		$('#subnav-livres').css('display', 'none');
    		$('#subnav-tirages').css('display', 'none');
    		$('#subnav-objets').css('display', 'none');
     
     
    		//////action menu over
     
    		$('#nav-tirages').hover(function() {
              $('#subnav-tirages').css('display', 'block');
            });
    		$('#nav-tirages').mouseout(function() {
              $('#subnav-tirages').css('display', 'none');
            });
    		$('#subnav-tirages').mouseover(function() {
              $('#subnav-tirages').css('display', 'block');
            });
     
            $('#subnav-tirages').mouseout(function() {
              $('#subnav-tirages').css('display', 'none');
            });
     
     
     
     
    		$('#nav-livres').hover(function() {
              $('#subnav-livres').css('display', 'block');
            });
    		$('#nav-livres').mouseout(function() {
              $('#subnav-livres').css('display', 'none');
            });
    		$('#subnav-livres').mouseover(function() {
              $('#subnav-livres').css('display', 'block');
            });
     
            $('#subnav-livres').mouseout(function() {
              $('#subnav-livres').css('display', 'none');
            });
     
     
     
    		$('#nav-promotions').hover(function() {
              $('#subnav-promotions').css('display', 'block');
            });
    		$('#nav-promotions').mouseout(function() {
              $('#subnav-promotions').css('display', 'none');
            });
    		$('#subnav-promotions').mouseover(function() {
              $('#subnav-promotions').css('display', 'block');
            });
     
            $('#subnav-promotions').mouseout(function() {
              $('#subnav-promotions').css('display', 'none');
            });		
     
     
     
     
    		$('#nav-labos').hover(function() {
              $('#subnav-labos').css('display', 'block');
            });
    		$('#nav-labos').mouseout(function() {
              $('#subnav-labos').css('display', 'none');
            });
    		$('#subnav-labos').mouseover(function() {
              $('#subnav-labos').css('display', 'block');
            });
     
            $('#subnav-labos').mouseout(function() {
              $('#subnav-labos').css('display', 'none');
            });
    		$('#nav-labos').hover(function() {
              $('#subnav-labos').css('display', 'block');
            });
    		$('#nav-labos').mouseout(function() {
              $('#subnav-labos').css('display', 'none');
            });
    		$('#subnav-labos').mouseover(function() {
              $('#subnav-labos').css('display', 'block');
            });
     
            $('#subnav-labos').mouseout(function() {
              $('#subnav-labos').css('display', 'none');
            });	
     
     
     
     
    		$('#nav-objets').hover(function() {
              $('#subnav-objets').css('display', 'block');
            });
    		$('#nav-objets').mouseout(function() {
              $('#subnav-objets').css('display', 'none');
            });
    		$('#subnav-objets').mouseover(function() {
              $('#subnav-objets').css('display', 'block');
            });
     
            $('#subnav-objets').mouseout(function() {
              $('#subnav-objets').css('display', 'none');
            });

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    La force de jQuery est de pouvoir travailler sur des collections d'éléments.
    Donc au lieu d'affecter un comportement à chaque élément de menu en fonction de leur id, tu ferais mieux de leur affecter une classe commune.
    D'autre part, la méthode .hover() peut prendre 2 paramètres de type fonction ; le premier correspondant au mouseover, le second au mouseout.
    Donc, si on considère que tes items de menu ont la classe 'menu-item', ton code peut être simplifié en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $(document).ready(function(){
        $('menu-item').hide().hover(
            function(){
                $(this).show();
            },
            function(){
                $(this).hide();
            });
    });
    Tu noteras qu'après le premier hide(), l'objet jQuery renvoie la collection en cours, il est donc possible d'enchainer le traitement sur l'ensemble des éléments avec .hover().
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Par défaut
    Bonjour, merci pour cette explication, par contre je ne suis pas sur que ca puisse me convenir, regardez comment j'ai travaillé , sachant que je ne suis pas a l'aise avec la css

    www.developper-photo.com
    mdp : dvp/dvp

    dite moi ce que vous en pensez ... est ce que je peux optimiser ...

    Merci de vos conseils .

    Jérémie

  4. #4
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    J'ai regardé votre page, mais je ne suis pas certain d'avoir bien compris la logique de votre système, mais voici un exemple de simplification.

    Dans cet exemple lorsque l'utilisateur passe sur un id "nav-X' l'élément d'id "subnav-X" apparaît. Cet élément reste affiché jusqu'à ce que l'utilisateur entre et sorte de la zone de l'élément. Mais si vous réalisez un test, ce sera plus explicite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <script>
    	$(function(){
    		$("[id^='subnav-']").hide();
     
    		$("[id^='nav-']").mouseenter(function(){
    			$("#sub"+this.id).show("slow");
    		});
     
    		$("[id^='subnav-']").mouseleave(function() {
    			$(this).hide("slow");
    		});
    	});
    </script>

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Par défaut
    Bonjour,

    Super merci pour cette fonction qui me simplifie tout ! vraiment puissant ! j'ai du adapter en ajoutant 2 ligne en bas car lorsque je survole un onglet du menu cela affiche la zone dessous mais si je ne la survole pas et que je quitte de suite l'élément reste affiché

    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
    (document).ready(function() {
    
    		$("[id^='subnav-']").hide();
    		
    		$("[id^='nav-']").mouseenter(function(){
    			$("#sub"+this.id).show();
    		});
    		
    		$("[id^='subnav-']").mouseleave(function() { 
    			$(this).hide();
    		});
    		
    		$("[id^='subnav-']").mouseover(function() { 
    			$(this).show();
    		});
    		$("[id^='nav-']").mouseleave(function(){
    			$("#sub"+this.id).hide();
    		});
    Encore une question est il possible depuis cette fonction de porter l'effet hover sur le bouton nav lorque l'on survole la zone subnav ?

    Encore mercie pour l'aide que vous m'apportez.

  6. #6
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    Citation Envoyé par mims1664 Voir le message
    Encore une question est il possible depuis cette fonction de porter l'effet hover sur le bouton nav lorque l'on survole la zone subnav ?
    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
    		// la vitesse pour hide et show est réglagle :
    		// "fast", "slow", un nombre en millisecondes : 2000 pour 2s
    		$("[id^='nav-']").hover(
    			function(){
    				$("#sub"+this.id).show("slow");
    			},
    			function(){
    				$("#sub"+this.id).hide("slow");
    			}
    		);
     
    		// hover = mouseenter + mouseleave.
    		// mouseover et mouseout sont à proscrire
    		$("[id^='subnav-']").hover(
    			function() {
    				$(this).show("slow");
    				$("#"+this.id.slice(3)).show("slow");
    			},
    			function() { 
    				$(this).hide("slow");
    				$("#"+this.id.slice(3)).hide("slow");
    			}
    		);

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Par défaut
    Bonsoir,

    Merci mais je ne comprends pas bien, ce n'est pas l'effet que j'attends !!!
    ce que je voulais c'est lorsque je survole le menu tirage, il soit (le menu) pour la css en hover, et la zone subnav-tirage en visible. lorsque je quitte les 2 zones le menu tirage passe en normal et la zone subnav-tirage disparait.

    Avec le code que vous me proposez j'ai un comportement bizarre ...


    Jérémie

Discussions similaires

  1. Besoin d'aide pour la fonction"SI"
    Par chouchou_82 dans le forum Excel
    Réponses: 2
    Dernier message: 12/01/2009, 08h17
  2. besoin d aide pour les fonction en postgresql
    Par dannw dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 11/07/2007, 21h20
  3. Besoin d'aide pour la fonction execute immediate
    Par kevin8100 dans le forum Oracle
    Réponses: 13
    Dernier message: 25/06/2007, 15h00
  4. [FPDF] Besoin d'aide pour une fonction publipostage..;
    Par dark$hadow dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 10/02/2007, 15h39
  5. [Mail] besoin d'aide pour la fonction mail
    Par laymounos dans le forum Langage
    Réponses: 5
    Dernier message: 07/06/2006, 21h16

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