begin process at 2012 05 27 14:22:48
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Flash / Flash MX

 > 

Scripts

 > 

ActionScript

 > 

Menu deroulant dynamique ... fonction globale ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Menu deroulant dynamique ... fonction globale ?

vendredi 26 novembre 2010 à 12:41:10 | Menu deroulant dynamique ... fonction globale ?

dims87

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;

cetItem.addEventListener(MouseEvent.MOUSE_OVER, auSurvol);
cetItem.addEventListener(MouseEvent.MOUSE_OUT, alExterieur);

cetItem.addEventListener(MouseEvent.MOUSE_OVER, auSurvole);


}
private function auSurvol(e:MouseEvent):void {
cetItem.alpha = 0.0;
cetItem.mouseChildren = false;

}
private function alExterieur(e:MouseEvent):void {
cetItem.alpha = 1;
//cetItem.visible = false;
}

private function auSurvole(e:MouseEvent):void {
trace("j'affiche les " + cetItem.nbElt + " éléments de la rubrique " + cetItem.label);
}

public function afficher(yMax:Number):void {
cetItem.visible = true;
positionFinale = yMax;
cetItem.addEventListener(Event.ENTER_FRAME, seDeplaceVersLeBas);
}
function seDeplaceVersLeBas(e:Event):void {
cetItem.y +=vitesse ;
if (cetItem.y >= positionFinale) {
cetItem.y = positionFinale;
cetItem.removeEventListener(Event.ENTER_FRAME, seDeplaceVersLeBas);
}
}

public function effacer(yMin:Number):void {
positionFinale = yMin;
cetItem.addEventListener(Event.ENTER_FRAME, seDeplaceVersLeHaut);
}

function seDeplaceVersLeHaut(e:Event):void {
cetItem.y -=vitesse ;
if (cetItem.y <= positionFinale) {
cetItem.y = positionFinale;
cetItem.removeEventListener(Event.ENTER_FRAME, seDeplaceVersLeHaut);
cetItem.visible = false;
}
}

}
}

///////////////////////////////////////////////////////////////////////////////////////////////
Menu.as


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);

entete.addEventListener(MouseEvent.MOUSE_UP, auClic);

// 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;
}
}
}
}


///////////////////////////////////////////////////////////////////////////////////////////////
FICHIER FLA

/*
# 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();

//
listeGalerie = donneesLues.elements();
nbGalerie = calculerLongueur(listeGalerie);
//
for (var i:int=0; i < (nbGalerie); i++) {
//
descriptiong = donneesLues.galerie[i].@descriptiong;
linkg = donneesLues.galerie[i].@linkg;

nomg = donneesLues.galerie[i].@nomg;
trace (descriptiong);
trace (linkg);
trace (nomg);
//
listeImage = donneesLues.galerie[i].elements();
nbImage=calculerLongueur(listeImage);


rubriqueR1[i] = creerRubrique(nomg,linkg);

var menuR1:Menu = new Menu("Rubrique1",250, 250, rubriqueR1);
addChild(menuR1);



//}
}
} catch (e:TypeError) {
trace("Imposible de charger le XML");
trace(e.message);
}
}




var rubriqueR1:Array = new Array();



function creerRubrique(nom:String, nbElt:String):Array {
var theme:Array = new Array(nom, nbElt);
return(theme);
}

///////////////////////////////////////////////////////////////////////////////////////////////

vendredi 26 novembre 2010 à 14:33:46 | Re : Menu deroulant dynamique ... fonction globale ?

dj_ouf

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


Cette discussion est classée dans : function, var, number, entete, cetitem


Répondre à ce message

Sujets en rapport avec ce message

loadMovie (); et XML [ par Orange73 ] Yop les gens !Bon voilà, j'ai une anim principal dans laquelle je fais appel à un swf externe qui contient un AS permettant de faire un diaporama imag Gallerie Flash [ par theneoshaman ] Bonjours amis Flasheurs !Je suis en train de créer une gallerie dynamique en flash (mon dieu, que c'est original !) et j'ai un pb (sans déconner :p).. Problem de variable qui renvoi un NaN" dans un SlideShow [ par theneoshaman ] Amis Flasheurs...  Bonjours !Je suis en train de créer une petit flash où des images défilent mais ma première image ne revient pas derrière la derniè diaporama avec importation aléatoire [ par JackNUMBER ] bonjour à tous !!j'ai trouvé 2 scripts que j'aimerai combiné.L'un sert à charger une image aléatoirement dans un MovieClip (qu'il créé) qui est conten Lien sur image dans un diaporama flash ? [ par phobiahz ] Bonjour a tous !Voila j'ai le code d'un diaporama (fixe mais avec fondu entre les images) dont les images sont chargées dynamiquement a partir d'un fi Aprentissage difficile des classes [ par szambaux ] Bonjour je suis en train de me former au classe est j'ai vraiment du mal donc je poste ce que j'ai fait, c'est une classe récupere le nom d'un fichier scroll ne s'arrête pas au bas du texte [ par Baby Jane ] Bonjour,J'ai réalisé un vertical scrollbar pour un site entièrement en flash 8. Je souhaite que lorsque le scrollFace est au bas de mon scrollTrack, c aide pour un debutant [ par coreangel ] bonjour je vien de recup sur le site un diaporama (DIAPORAMA XML AVEC FONDU) de hiltonet j aimerai pouvoir lire des annime .swf mais je sais pas comme stopper un carrousel sur un angle prédéfini [ par neuronezero ] Alors voilà mon problème...J'ai fais un carrousel tout simple en AS2, mais je désirerais faire en sorte que quand je clik sur l'un des objets le carro relancer un diaporama XML sur un second XML [ par vegetalain ] Salut tout le monde... alors voilà, je suis dsl mais je ne sais plus où j'ai pris le code dont je vais vous parler :/ snif.Le code suivant permet de c


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,530 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales