menu déroulant en AS / syntaxe listener

menu déroulant en AS / syntaxe listener - Flash/ActionScript - Programmation

Marsh Posté le 21-05-2010 à 06:01:34    

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. }

Reply

Marsh Posté le 21-05-2010 à 06:01:34   

Reply

Marsh Posté le 25-05-2010 à 22:46:10    

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.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed