dims87
Messages postés1Date d'inscriptionvendredi 24 avril 2009StatutMembreDernière intervention26 novembre 2010
-
26 nov. 2010 à 12:41
dj_ouf
Messages postés221Date d'inscriptionvendredi 15 avril 2005StatutMembreDernière intervention 6 septembre 2011
-
26 nov. 2010 à 14:33
Bonjour à Tous ,
Je m'appelle Dimitri et je me lance intensivement dans action script depuis 3 bonnes semaines.
Je me suis inspiré d'un exercice du livre Apprendre a Programmer en AS3 ( Anne Tasso ) fin de réaliser mon menu déroulant.
Mon menu fonctionne mais j’aimerai appliquer un event mouse_out sur les items.
En effet j'aimerai que le menu s'affiche lorsque le curseur survole la rubrique ainsi que les items et que le menu se referme lorsque le curseur "quitte" la zone.
Mon probleme est que la fonction que je pense necessaire : aDerouler , ne se situe pas dans la classe item mais dans la classe menu.
Serait-il possible de l'appeler depuis la classe item ?
Merci d'avance pour votre aide !
Item.as
//Définition de la classe Item
package {
import flash.display.*;
import flash.events.*;
public class Item extends Sprite {
private var info:Array;
private var cetItem:ItemMenuClp;
private var vitesse:Number = 12;
private var positionFinale:Number;
public function Item(nx:Number, ny:Number, l:Array) {
cetItem = new ItemMenuClp();
addChild(cetItem);
cetItem.x = nx;
cetItem.y = ny;
cetItem.labelOut.text=l[0];
cetItem.label = l[0];
cetItem.nbElt = l[1];
cetItem.visible = false;
package {
import flash.display.*;
import flash.events.*;
//Définition de la classe Menu extends Sprite
public class Menu extends Sprite {
// Définition des attributs de la classe
private var entete:ItemMenuClp;
private var listeItems:Array;
public var estVisible:Boolean = false;
private var clicSurEntete:Boolean = false;
private function aDerouler(nbr:Number):void {
var x:Number = entete.x;
var y:Number = entete.y;
var h:Number = entete.height;
for (var i:uint = 0; i < nbr; i++) {
listeItems[i].afficher(h*(i+1)+y );
}
}
private function aEnrouler(nbr:Number):void {
var x:Number = entete.x;
var y:Number = entete.y;
var h:Number = entete.height;
for (var i:uint = 0; i < nbr; i++) {
listeItems[i].effacer(y);
}
}
private function ajouterUnItem(rubrique:Array, num:uint):void {
var x:Number = entete.x;
var y:Number = entete.y;
var h:Number = entete.height;
var nvelItem:Item = new Item( x,y, rubrique);
addChildAt(nvelItem,0);
listeItems.push(nvelItem);
}
public function Menu(nom:String, nx:Number, ny:Number, l:Array) {
var nbRubrique:Number = l.length;
entete = new ItemMenuClp();
entete.x = nx;
entete.y = ny;
entete.labelOut.text = nom;
addChildAt(entete,0);
listeItems = new Array();
for (var i:uint = 0; i < nbRubrique; i++) {
ajouterUnItem(l[i], i);
}
entete.addEventListener(MouseEvent.MOUSE_OVER, auSurvol);
entete.addEventListener(MouseEvent.MOUSE_OUT, alExterieur);
// a. l'entête écoute l'événement lié au focus de la souris
entete.addEventListener(FocusEvent.FOCUS_OUT, unClicAilleurs);
}
// a. Si l'entete perd le focus, le menu est enroulé, le drapeau estVisible est remis à false
private function unClicAilleurs(e:FocusEvent):void {
var nbRubrique:Number = listeItems.length;
aEnrouler(nbRubrique);
entete.estVisible = false;
}
private function auSurvol(e:MouseEvent):void {
entete.alpha = 0.4;
}
private function alExterieur(e:MouseEvent):void {
entete.alpha = 0;
}
private function auClic(e:MouseEvent):void {
var nbRubrique:Number = listeItems.length;
if ( !entete.estVisible) {
aDerouler(nbRubrique);
entete.estVisible = true;
} else {
aEnrouler(nbRubrique);
entete.estVisible = false;
}
}
}
}
/*
# Apprendre à programmer en ActionScript 3
# A. Tasso
# Chapitre 9 : Les principes du concept objet
# Exercice : Un menu déroulant
# Fichier : Exercice 9_8.fla
# Classe : Menu.as et Item.as
*/
function calculerLongueur(liste:XMLList):uint {
var compteur:uint = 0;
for each (var elt:XML in liste) {
compteur++;
}
return compteur;
}
// Script principal
// Déclaration des variables
var largeur:uint = stage.stageWidth;
var hauteur:uint = stage.stageHeight;
// Charger le fichier XML
var chargeurXML:URLLoader = new URLLoader();
chargeurXML.dataFormat = URLLoaderDataFormat.TEXT;
chargeurXML.addEventListener(Event.COMPLETE, gestionXML);
chargeurXML.load(new URLRequest("Repertoire.xml"));
// Une fois chargé, traiter les données contenu dans le fichier XML
function gestionXML(e:Event):void {
try {
var nbGalerie:uint = 0;
var nbImage:uint = 0;
var descriptiong, descriptioni, linki,linkg, nomg:String;
var elt:XML;
// Créer un objet XML et un objet XMLList
var donneesLues:XML = new XML(e.target.data);
var listeGalerie:XMLList = new XMLList();
var listeImage:XMLList = new XMLList();
dj_ouf
Messages postés221Date d'inscriptionvendredi 15 avril 2005StatutMembreDernière intervention 6 septembre 2011 26 nov. 2010 à 14:33
Salut
Il vaut mieux gérer tous les survols et mouse_out depuis le menu, car tu peux cibler l'ensemble des menus déroulants pour les desafficher.
Je vois dans ce code que lors du mouse_out, on met l'alpha à 0. C'est amplement suffisant.
La classe Item ne doit gérer le mouse_click sur elle-même, et encore...