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 :

Factorisation de code de menu déroulant.


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 191
    Points : 80
    Points
    80
    Par défaut Factorisation de code de menu déroulant.
    Bonjour

    Donc j'ouvre ce sujet car je suis encore novice dans le JS et encore du mal à bien choper la gymnastique mais bon... Je vais y arriver =)

    Bref ma question concerne mon en-tête de page qui est simplement un menu
    Dans ce menu il y a 6 catégories et dans l'une d'entre elles des sous catégorie

    Mon but va vous paraitre assez simple... J'aimerais qu'au passage de la souris de certain cela ouvre la sous catégorie.

    Disons que dans l'idée, le menu est horizontal que les sous catégorie qui apparaissent, s'affichent en dessous et que pour la catégorie qui contient des sous catégorie, celles ci s'ouvre sur le coté, sans que la première se ferme

    J'aimerais savoir si déjà il était possible de ne faire qu'un seul et même code pour cela. ou au moins juste pour les premières sous catégorie. (celle qui s'affichent vers le bas)

    Pour la catégorie qui contient d'autre sous catégorie j'avais pensé au système d'accordéon de haut en bas avec les JQueryui, sauf que j'ai un peu du mal à l'utiliser pour le moment

    Voici le lien de mon code :

    https://jsfiddle.net/rda1afzk/53/


    Merci d'avance =)

  2. #2
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2014
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Arménie

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2014
    Messages : 388
    Points : 580
    Points
    580
    Par défaut
    Bonjour,

    Je trouve les menus déroulants de ce site très élégants.

    http://www.frogweb.fr/menu-deroulant-horizontal/

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    Il existe en effet des codes tout faits pour ce type de menu
    mais pour t'exercer, tu pourraiss essayer de factoriser ton code ...

    Au lieu de pointer sur tes élements de menu par leur id, ce qui t'oblige à le faire pour chaque item du menu, tu pourrais leur mettre un class
    ainsi, au lieu d'attribuer le mouseover / mouseout sur chaque élément individuellement, tu pourrai l'appliquer en une seule fois sur tous les élements ayant la class.

    genre une classe pour le niveau 1 class="niveau1"
    puis une classe pour le niveau2 etc ...
    Tu factorises ainsi le code qui en sera fortement réduit ...

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 191
    Points : 80
    Points
    80
    Par défaut
    Merci pour vos réponses si rapides !! =)

    Pour l'idée des classes j'avais essayé mais sans succès... Je vais refaire, je m'étais peu être trompé quelque part, mais de souvenir j'avais mis une class en plus de l'id sur le HTML et changé les "getElementById" en "getElementbyClassName"

    Ou alors j'ai pas compris un truc

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    getElementsbyClassName

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 191
    Points : 80
    Points
    80
    Par défaut
    Ha oui désolé j'avais oublié le "s" mais utilisant Brackets je n'ai pas ce souci de faute de frappe

    J'ai testé la méthode que avec le CSS... Ça marche super mais j'aimerais vraiment utiliser JS et JQ pour cela... (de plus cela ne marche que pour 1 niveau de sous menu)

    J'ai donc essayé la méthode avec des "class" :

    https://jsfiddle.net/rda1afzk/93/

    Sans succès

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    Tu ne respecte pas la structure d'un ul et d'imbrication d'un ul dans un autre ...
    tu ne peux imbriquer un ul qu'à l'intérieur d'un li ...





    Toi tu codes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <ul>
      <li></li>
      <ul>
           <li></li>
      </ul>
     
    </ul>
    Ce qui n'est pas sémantiquement correct car un ul ne peut pas contenir directement autre chose qu'un li



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <ul>
      <li> ICI </li>
    </ul>
    ce qui donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <ul>
      <li>
         <ul>
             <li> </li>
         </ul>
      </li>
    </ul>

    voici un exemple rapide avec Jquery de ce que cela pourrait donner ...
    Tu remarqueras la concision du code par rapport a ton premier essai ...
    https://jsfiddle.net/rda1afzk/119/

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 191
    Points : 80
    Points
    80
    Par défaut
    Ok j'ai bien compris le principe de la structure de ul avec li. J'ai corrigé cela mais si on reste sur le même code en faisant ces changements, il n'y a pas de grand changement vis à vis du JS... Donc d'ou viendrait le souci ?

    Merci pour la partie JQuerry ! Même si j'ai du mal à la comprendre

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    sinon, il y a ça : MENUS multi-niveaux CSS jQuery


    Remarque : le :hover (ou mouseenter/mouseleave) est "has been" depuis le "tactile"...

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    Je n'ai pas regardé en détail, mais il y a fort à parier que le souci vienne des sélécteurs
    Quand tu es sur un alpha il faut pointer sur le beta enfant direct

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 191
    Points : 80
    Points
    80
    Par défaut
    Oui effectivement le :hover peut être un problème pour le tactile, j'ai donc modifié par des "click" dans la version JQuerry.

    Spacefrog : J'ai modifié aussi, dans la première version, dans le JS, le système de passage de la souris par des clicks avec "onclick" mais meme si je click sur les "beta" y'a pas de changement...

    https://jsfiddle.net/rda1afzk/131/

    Merci Jreaux62 pour tes liens !! c'est ça que je cherche !! Bon faut que je les décryptes maintenant car j'aime pas trop copier/coller bêtement sans savoir ce que je fais =)

  12. #12
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    Tu as bien en effet un souci de selecteur

    tu ne peux pas ajoute en bluk un event sur une collection document.getElementsByClassName
    tu dois boucler sur element de la collection pour lui attribuer l'event ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var unroll = document.getElementsByClassName('alpha');
    unl= unroll.length;
    for (i=0;i<unl;i++){ 
    forunroll.addEventListener("onclick", deroulement, false);
    }
    de plus dans ta fonction déroulement il faudra tenir compte de l'element cliqué poru appliquer le display de façon relative (enfants )puis de même boucler sur la collection pour attribuer le display
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function deroulement(e){
        var unroll =e.target.getElementsByClassName('beta');
        unl= unroll.length;
       for (t=0;t<unl;t++){ 
            unroll[t].style.display=( unroll[t].style.display=="block")?"none":"block";
        }

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par d3LTa7 Voir le message
    Merci Jreaux62 pour tes liens !! c'est ça que je cherche !! Bon faut que je les décryptes maintenant car j'aime pas trop copier/coller bêtement sans savoir ce que je fais =)
    J'avais justement organisé un "jeu" ICI *:
    En y allant étape par étape.
    Avec un codepen pour chaque étape.

    * Il s'agit plus précisément d'une série d'exercices, sur l'utilisation du CSS dans la réalisation d'un MENU multi-niveaux.
    Dernière modification par Invité ; 05/07/2018 à 18h35.

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 191
    Points : 80
    Points
    80
    Par défaut
    Merci pour vos réponse !!

    Je me rend compte que j'ai encore beaucoup à apprendre et que je suis loin de comprendre encore bien les rudiments de JS et de Jquerry...

    C'est vraiment pas facile mais je vais y arrivé, faut juste que j'arrive à comprendre la logique et la mécanique...

  15. #15
    Invité
    Invité(e)
    Par défaut
    On écrit "jQuery".
    Pas "Jquerry"...

    Mon conseil :
    Commence par des exercices SIMPLES.

    • Ne cherche pas à adapter tout de suite à tes besoins. (sinon, tu vas te décourager très vite, par manque de compréhension)
    • Comprends d'abord le fonctionnement.
    • Ensuite seulement, adapte.
    Dernière modification par NoSmoking ; 05/07/2018 à 15h10. Motif: jQuery et non JQuery ;)

  16. #16
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    Jquery simplifie les choses car il n'y a plus besoin de boucler sur la collection on peut attribuer un event en bulk en une seule ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $('.alpha').on('click', function(){
      $(this).find('>.beta').show();
    })
    sinon un autre full css de notre ami Lcf.vs https://lcfvs.github.io/css-ui/

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 191
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    J'avais justement organisé un "jeu" ICI :
    En y allant étape par étape.
    Avec un codepen pour chaque étape.
    Merci Jreaux mais je ne comprend pas ton lien ! Il m’amène directement sur une discussion flex/IE

  18. #18
    Invité
    Invité(e)
    Par défaut
    Exact.

    Et je donne la solution à chaque exercice/étape.

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 191
    Points : 80
    Points
    80
    Par défaut
    Ha ok !! Mais j'ai peur de pas bien comprendre au final...

    Ou est le jeu en question ? Ou est l'exercice :/

    Sinon, oui effectivement je m'attaque p'tet a du "gros" alors que j'aborde JS que depuis 2 semaines environs (pour le moment j'ai suivi que quelques cours de base par vidéo et un exercice très basique sur un jet de dé).

  20. #20
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par d3LTa7 Voir le message
    J'avais justement organisé un "jeu" ICI *:
    * Il s'agit plus précisément d'une série d'exercices, sur l'utilisation du CSS dans la réalisation d'un MENU multi-niveaux - Full CSS (:hover).
    L'affichage des sous-menus s'effectue sur le :hover.

    Au final on obtenait :
    Solution Exercice 8 : https://codepen.io/jreaux62/pen/MOVwKx

    Dont la version complète est :


    (mais le :hover montre sa limite dès qu'on est sur écran tactile)


    Le jQuery n'y est pas abordé.
    (trop compliqué pour les 2 "joueurs" concernés... et j'ai abandonné l'idée de leur expliquer via un autre "jeu"...)
    Dernière modification par Invité ; 05/07/2018 à 18h53.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Code macro sélection dans un menu déroulant
    Par Sofy16 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/12/2015, 12h31
  2. Menu déroulant - Comment repérer les codes dans style.css ?
    Par NOVICE18 dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 11/06/2013, 17h52
  3. Réponses: 1
    Dernier message: 24/01/2012, 09h01
  4. code d'un menu déroulant
    Par sara.isgi dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/03/2011, 07h10

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