Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2541 connectés 

  FORUM HardWare.fr
  Programmation
  Flash/ActionScript

  menu déroulant en AS / syntaxe listener

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

menu déroulant en AS / syntaxe listener

n°1994952
shinji3rd
Posté le 21-05-2010 à 06:01:34  profilanswer
 

Bonjour,
je débute en AS et je tente de développer un menu flash avec un sous menu qui se déroule lors du clic et non du survol. Au premier clic un premier sous menu s'ouvre, le problème c'est que lors d'un deuxième clic, le deuxième sous menu s'ouvre mais il se superpose au premier. Je n'arrive pas à trouver de syntaxe pour dire "si un menu est déjà ouvert, ferme-le, puis ouvre...."
D'apres ce que je comprends il faut ajouter un listener, qui va détecter si un menu est déjà ouvert. J'ai déjà réussi à en mettre pour savoir quand un bouton était cliqué, mais je ne vois pas comment rédiger le "déjà ouvert"...
des pistes svp?
 

Code :
  1. menu_mc.visible = false ;
  2. menu_mc.actu_btn.addEventListener(MouseEvent.CLICK, clickItem);
  3. menu_mc.mc_presentation_btn.addEventListener(MouseEvent.CLICK, clickItem);
  4. menu_mc.nossites_btn.addEventListener(MouseEvent.CLICK, clickItem);
  5. menu_mc.innov_btn.addEventListener(MouseEvent.CLICK, clickItem);
  6. menu_mc.invest_btn.addEventListener(MouseEvent.CLICK, clickItem);
  7. menu_mc.presse_btn.addEventListener(MouseEvent.CLICK, clickItem);
  8. menu_mc.media_btn.addEventListener(MouseEvent.CLICK, clickItem);
  9. menu_mc.carriere_btn.addEventListener(MouseEvent.CLICK, clickItem);
  10. notregroupe_btn.addEventListener(MouseEvent.MOUSE_DOWN, clickButton);
  11. function clickButton(event:MouseEvent):void
  12. {
  13.         if (menu_mc.visible == true)
  14.         {
  15.                 menu_mc.visible = false;
  16.         } else if (menu_mc.visible == false)
  17.         {
  18.                 menu_mc.visible = true;
  19.         }
  20. }
  21. function clickItem(event:MouseEvent):void
  22. {
  23.         navigateToURL(new URLRequest("http://www..." ), '_self');
  24. }
  25. menu_mc2.visible = false ;
  26. menu_mc2.approv_btn.addEventListener(MouseEvent.CLICK, clickItem2);
  27. menu_mc2.traca_btn.addEventListener(MouseEvent.CLICK, clickItem2);
  28. menu_mc2.solidarite_btn.addEventListener(MouseEvent.CLICK, clickItem2);
  29. menu_mc2.commerce_btn.addEventListener(MouseEvent.CLICK, clickItem2);
  30. menu_mc2.protec_btn.addEventListener(MouseEvent.CLICK, clickItem2);
  31. menu_mc2.deontologie_btn.addEventListener(MouseEvent.CLICK, clickItem2);
  32. menu_mc2.qualite_btn.addEventListener(MouseEvent.CLICK, clickItem2);
  33. ethique_btn.addEventListener(MouseEvent.MOUSE_DOWN, clickButton2);
  34. function clickButton2(event:MouseEvent):void
  35. {
  36.         if (menu_mc2.visible == true)
  37.         {
  38.                 menu_mc2.visible = false;
  39.         } else if (menu_mc2.visible == false)
  40.         {
  41.                 menu_mc2.visible = true;
  42.         }
  43. }
  44. function clickItem2(event:MouseEvent):void
  45. {
  46.                         navigateToURL(new URLRequest("http://www..." ), '_self');
  47. }
  48. menu_mc3.visible = false ;
  49. menu_mc3.provence_btn.addEventListener(MouseEvent.CLICK, clickItem3);
  50. menu_mc3.ocean_btn.addEventListener(MouseEvent.CLICK, clickItem3);
  51. menu_mc3.americ_btn.addEventListener(MouseEvent.CLICK, clickItem3);
  52. menu_mc3.europe_btn.addEventListener(MouseEvent.CLICK, clickItem3);
  53. culture_btn.addEventListener(MouseEvent.MOUSE_DOWN, clickButton3);
  54. function clickButton3(event:MouseEvent):void
  55. {
  56.         if (menu_mc3.visible == true)
  57.         {
  58.                 menu_mc3.visible = false;
  59.         } else if (menu_mc3.visible == false)
  60.         {
  61.                 menu_mc3.visible = true;
  62.         }
  63. }
  64. function clickItem3(event:MouseEvent):void
  65. {
  66.                         navigateToURL(new URLRequest("http://www..." ), '_self');
  67. }
  68. menu_mc4.visible = false ;
  69. menu_mc4.plantes_btn.addEventListener(MouseEvent.CLICK, clickItem4);
  70. menu_mc4.huile_btn.addEventListener(MouseEvent.CLICK, clickItem4);
  71. menu_mc4.huiles_veget_btn.addEventListener(MouseEvent.CLICK, clickItem4);
  72. menu_mc4.eaux_btn.addEventListener(MouseEvent.CLICK, clickItem4);
  73. univers_btn.addEventListener(MouseEvent.MOUSE_DOWN, clickButton4);
  74. function clickButton4(event:MouseEvent):void
  75. {
  76.         if (menu_mc4.visible == true)
  77.         {
  78.                 menu_mc4.visible = false;
  79.         } else if (menu_mc4.visible == false)
  80.         {
  81.                 menu_mc4.visible = true;
  82.         }
  83. }
  84. function clickItem4(event:MouseEvent):void
  85. {
  86.                         navigateToURL(new URLRequest("http://www..." ), '_self');
  87. }
  88. menu_mc5.visible = false ;
  89. menu_mc5.parfine_btn.addEventListener(MouseEvent.CLICK, clickItem5);
  90. menu_mc5.parftech_btn.addEventListener(MouseEvent.CLICK, clickItem5);
  91. menu_mc5.soins_btn.addEventListener(MouseEvent.CLICK, clickItem5);
  92. menu_mc5.indusucre_btn.addEventListener(MouseEvent.CLICK, clickItem5);
  93. menu_mc5.indusale_btn.addEventListener(MouseEvent.CLICK, clickItem5);
  94. activite_btn.addEventListener(MouseEvent.MOUSE_DOWN, clickButton5);
  95. function clickButton5(event:MouseEvent):void
  96. {
  97.         if (menu_mc5.visible == true)
  98.         {
  99.                 menu_mc5.visible = false;
  100.         } else if (menu_mc5.visible == false)
  101.         {
  102.                 menu_mc5.visible = true;
  103.         }
  104. }
  105. function clickItem5(event:MouseEvent):void
  106. {
  107.                         navigateToURL(new URLRequest("http://www..." ), '_self');
  108. }
  109. menu_mc6.visible = false ;
  110. menu_mc6.matieres_btn.addEventListener(MouseEvent.CLICK, clickItem6);
  111. menu_mc6.compo_btn.addEventListener(MouseEvent.CLICK, clickItem6);
  112. menu_mc6.compo_arom_btn.addEventListener(MouseEvent.CLICK, clickItem6);
  113. metiers_btn.addEventListener(MouseEvent.MOUSE_DOWN, clickButton6);
  114. function clickButton6(event:MouseEvent):void
  115. {
  116.         if (menu_mc6.visible == true)
  117.         {
  118.                 menu_mc6.visible = false;
  119.         } else if (menu_mc6.visible == false)
  120.         {
  121.                 menu_mc6.visible = true;
  122.         }
  123. }
  124. function clickItem6(event:MouseEvent):void
  125. {
  126.                         navigateToURL(new URLRequest("http://www..." ), '_self');
  127. }

mood
Publicité
Posté le 21-05-2010 à 06:01:34  profilanswer
 

n°1996088
abais
Posté le 25-05-2010 à 22:46:10  profilanswer
 

Par exemple :
au début de ton code :

Code :
  1. var dernierMenuOuvert:String = "";
  2.  
  3. function fermerDernierMenu(menuActif:String) :void
  4. {
  5.    if(dernierMenuOuvert != "" ) //Si notre variable contient n'est pas vide
  6.       {
  7.       this[dernierMenuOuvert].visible=false; // On cache le clip auquel il correspond
  8.       }
  9.       dernierMenuOuvert = menuActif;// Et on le remplace par celui sur lequel on vient de cliquer
  10. }
 

Puis dans chacune de tes fonctions clickButton, rajoute :

Code :
  1. fermerDernierMenu(event.target.name);


Bon, il y a mieux, comme instancier directement l'objet plutôt que son nom... M'enfin !
Sinon, tu ne jouis pas de l'argument MouseEvent de tes fonctions déclenchées par tes EventListener...
Sache que ton MouseEvent contient des données interessante, comme l'objet sur lequel ta cliquer...
Concretement, plutot que de faire :
btn1 => listener => fonction 1 => action 1 sur btn1,
btn2 => listener => fonction 2 => action 2 sur btn2,
btn3... et ainsi de suite, tu peux faire :
btn1 , btn2, btn3 => listener => fonction generale pour btn => afficher/masquer le sousMenu du btn cliqué

 

Concretement :

Code :
  1. notregroupe_btn.addEventListener(MouseEvent.MOUSE_DOWN, clickButton);
  2. ethique_btn.addEventListener(MouseEvent.MOUSE_DOWN, clickButton);
  3. culture_btn.addEventListener(MouseEvent.MOUSE_DOWN, clickButton);
  4. //...
  5.  
  6. function clickButton(event:MouseEvent):void
  7. {
  8.    if (sousMenu(event.target.name).visible)
  9.    {
  10.        sousMenu(e.target.name).visible == false;
  11.        dernierMenuOuvert = "";
  12.    } else {
  13.        sousMenu(e.target.name).visible == true;
  14.        fermerDernierMenu(sousMenu(event.target.name).name);
  15.    }
  16. }
  17.  
  18. function sousMenu(menuBtn:String):MovieClip
  19. {
  20.    var clipEnQuestion:MovieClip;
  21.    switch(menuBtn){
  22.        case "notregroupe_btn" :
  23.            clipEnQuestion = menu_mc;
  24.            break
  25.        case "ethique_btn" :
  26.            clipEnQuestion = menu_mc2;
  27.            break
  28.        // ....
  29.        default :
  30.            break
  31.    }
  32.    return clipEnQuestion
  33. }

Bon ça devient bordélique, mais il y a une idée à exploiter...
En général, on nome assez bien le btn du menu et le conteneur du sousMenu pour pas devoir faire si compliquer (faire une fonction qui retourne, à partir d'un nom de btn, le sous menu qui en dépend...


Message édité par abais le 25-05-2010 à 22:48:35

---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Flash/ActionScript

  menu déroulant en AS / syntaxe listener

 

Sujets relatifs
Requete COUNT par menu deroulant.[Résolu] Questions Menu déroulant /opacité/IE7
menu déroulant largeurs variables sans JSMenu "Cloud"
Menu "animé" et très large. Flash ? Pas flash ?...affichage d'un menu
envoyer un email différent sur résultars menu déroulant 
Plus de sujets relatifs à : menu déroulant en AS / syntaxe listener


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR