Bonjour,
J'essaye de créer un menu composé d'un ensemble de n boutons créés à partir d'un titre et d'une date contenue dans un fichier XML.
ex du contenu du fichier (simplifiez pour l'occasion) :
Code XML :
<editions>
<bouquin><titre>book1</titre><date>13 septembre 2009</date><page>50</page></bouquin>
<bouquin><titre>book2</titre><date>23 septembre 2009</date><page>20</page></bouquin>
</editions>
Donc mon menu a la forme suivante :
...
13 septembre 2009 Book1
23 septembre 2009 Book2
...
Je case ces boutons dans un cadre et je cache tous ceux qui en sort de façon à ne faire apparaitre que 6 des boutons parfaitement empilés.
Je met à gauche les flèches de navigation sous forme de boutons qui lorsqu'ils sont "cliqués" font monter (ou descendre) mon menu provoquant, en bas
l'arrivée d'un nouveau bouton et en haut la disparition du 1er de la liste.
Mon problème est le suivant (on y arrive) : tout semble bien marcher (je peux fournir l'@ du site pour une démonstration) SAUF que lorsque je clique très rapidement sur mes flèches haut et bas les boutons ne montent (ou descendent) plus gentiment mais s'emmêlent certains sautant au dessus des autres ou c'est le décallage entre eux qui change.
Je me suis donc dit qu'il suffit de mettre un enable = false sur la flèche lorsqu'elle a été cliquée jusqu'à ce que le traitement soit effectué empêchant ainsi à l'utilisateur de reclicker et de provoquer des décalages mais ça ne semble pas fonctionner...
Ci dessous le code de l'évènement onclick du bouton permettant de faire "monter" d'un cran le menu :
Code ActionScript :
this.onRelease = function()
{
var i:Number=0;
var j:Number=0;
// On doit bloquer en cas de click multiples
this.enabled=false;
this.createEmptyMovieClip("btn_cour", this.getNextHighestDepth());
this.createEmptyMovieClip("btn_prems", this.getNextHighestDepth());
// initialisation des variables
// listeBouquin est un tableau contenant l'ensemble des noeuds XML de mon fichier
n=_parent.listeBouquin.length;
// je crée un bouton pour chaque bouquin
btn_name_parent="_parent.mini_diapo.btn_";
btn_name=btn_name_parent+"0";
btn_cour=_parent.mini_diapo.listeBouton[0];
btn_prems=btn_cour;
btn_larg= Math.round(btn_cour._height); // la hauteur du bouton est de 19,1
y_init=btn_cour._y;
y_fin=btn_cour._y - Math.round(btn_larg);
// Déplacement simultané des boutons
this.onEnterFrame=function()
{
// On doit réinitialiser le bouton courant à chaque fin de boucle
// on a avancé de 1 chacun des boutons
// on recommence jusqu'à atteindre la largeur du bouton
btn_cour=_parent.mini_diapo.listeBouton[0];
for(i=0;i<n;i++)
{
avance(2,btn_cour); //function avance(step:Number,btn:Button):Void{btn._y-=step;}
if ((btn_cour._y>=0) and (btn_cour._y<300)) btn_cour._visible=true;
else btn_cour._visible=false; //lorsque le bouton sort du cadre
btn_cour=_parent.mini_diapo.listeBouton[i+1];
}
// une fois que le bouton est monté on contrôle sa présence par rapport au cadre
if (Math.round(y_fin)== Math.round(btn_prems._y))
{
// on stoppe l'avancée
delete this.onEnterFrame;
// on inverse le bouton d'en haut avec celui du bas
btn_cour=_parent.mini_diapo.listeBouton[0];
descend_btn(btn_cour,_parent.mini_diapo.listeBouton[n-1]);
// On reconstruit la liste en décallant tous les boutons de 1
// sauf le 1er qui prend la dernière place
refait_liste_haut();
refait_tableau_haut();
};
};
// on charge la mini_scene avec l'élément précédent
_parent.charge_mini_scene(i);
// Le bouton doit redevenir clickable, on a effectué les traitements
// cela se fait quand la miniscene est chargée
// voir le code associé au chargment de la mini diapo
this.enabled
};
Voilà je débute de façon autodidacte en AS, toute aide sera la bienvenue merci à vous quoiqu'il en soit !