Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 29-08-2009, 11:42   #1 (permalink)
Neuer User
 
Registriert seit: Aug 2007
Beiträge: 12
AS3 dynamische Menü

HI!
Hab mir ein Menü gebaut, das über eine XML Einträge einliest. Das Problem dabei ist, dass wenn man auf die Menüs schnell hintereinander klickt die Positionierung der Submenüs über Bord geht. Ich vermute, dass es etwas mit dem Tween zu tun hat. Da er noch nicht fertig ist und durch einen neuen Aufruf überschrieben wird(siehe trace werte).


XML: (menues.xml)
Code:
<?xml version="1.0" encoding="utf-8"?>
<menues>
	<menuitems>
		<menu>fotografie</menu>
		<submenu>mensch</submenu>
		<submenu>stadt</submenu>
		<submenu>land</submenu>
	</menuitems>
	<menuitems>
		<menu>grafikdesign</menu>
		<submenu>test1</submenu>
		<submenu>hund</submenu>
	</menuitems>
	<menuitems>
		<menu>malerei</menu>
		<submenu>katze</submenu>
		<submenu>katze2</submenu>
		<submenu>katze3</submenu>
		<submenu>katze4</submenu>
	</menuitems>
	<menuitems>
		<menu>zeichnungen</menu>
	</menuitems>
	<menuitems>
		<menu>info</menu>
	</menuitems>
</menues>


AS3:
PHP-Code:
package {
    
import caurina.transitions.Tweener;
    
import flash.display.Sprite;
    
import flash.events.*;
    
import flash.net.URLLoader;
    
import flash.net.URLRequest;
    
import flash.text.*;
    
import flash.xml.XMLDocument;
    
import flash.xml.XMLNode;
    
    [
SWF(width='1024'height='700'backgroundColor='#FFFFFF'framerate='25')]

    public class 
MeineSeite extends Sprite
    
{
        public var 
menues:Array = new Array();
        public var 
g_xml:XML;
        public var 
xmlReq:URLRequest = new URLRequest("menues.xml");
        public var 
xmlLoader:URLLoader = new URLLoader();
        public var 
isOpenArr:Array = new Array();
        public var 
mainMenuItems:Array = new Array();
        public var 
subMenuItems:Array = new Array();
        public var 
subMenuEntries:Array = new Array();
        public var 
menuArr:Array = new Array();
        public var 
menuPosX:uint 30;
        public var 
menuPosY:uint 230;
        public var 
mainMenuTextFormat:TextFormat = new TextFormat();
        public var 
subMenuTextFormat:TextFormat = new TextFormat();
        public var 
headlineTextFormat:TextFormat = new TextFormat();
        public var 
letterWidth:uint 100;
        public var 
letterHeight:uint30;
        public var 
menuSpacing:uint;
        public var 
subMenuSpacing:uint;
        public var 
testSprite:Sprite = new Sprite();
        public var 
_open:Boolean;
        public var 
getEventNumber:Number;
        public var 
menuCount:Number 4;
        
        
        
        public function 
MeineSeite()
        {
            
xmlLoader.load(xmlReq);
            
xmlLoader.addEventListener(Event.COMPLETE,loadedXML);
        }
        
// XML reinladen und befüllen
        
public function loadedXML(e:Event):void
        
{
            
g_xml = new XML(xmlLoader.data);
            var 
ixml:XML = new XML(e.target.data);
            var 
myXML:XMLDocument = new XMLDocument();
            
myXML.ignoreWhite true;
            
myXML.parseXML(ixml.toString());
            var 
xnode:XMLNode myXML.firstChild
            var 
nodeName:String "menuitems";
            var 
iCounter:int ixml.elements(nodeName).length();
            
             for(var 
i:uint 0iCounter;i++)
             {
                 var 
initOpen:Boolean false;
                 
isOpenArr.push(initOpen);
                 var 
item:XML g_xml.menuitems[i];
                 
menues[i] = new Array();
                 var 
xCounter:uint;
                 for 
each (var node:XML in item.elements())
                 {
                     
menues[i][xCounter] = node;
                     
xCounter++;
                 }
                 
xCounter 0;
             }
             
             
             
makeMenu();
        }
        
        
        public function 
makeMenu():void
        
{
            
// Mainmenue Buttons
            
for(var i:uint 0;i<menues.length;i++)
            {
                var 
mainMenuTextField:TextField = new TextField();
                
mainMenuTextField.menuPosX;
                
mainMenuTextField.menuPosY menuSpacing;
                
mainMenuTextField.name ""+i+"";
                
mainMenuTextField.width letterWidth;
                
mainMenuTextField.height letterHeight;
                
mainMenuTextField.selectable false;
                
mainMenuTextField.htmlText "<a href='event:Test'>"+menues[i][0]+"</a>";
                
mainMenuTextField.addEventListener(MouseEvent.CLICKcloseopenSubMenu);
                
mainMenuItems.push(mainMenuTextField);                
                
addChild(mainMenuItems[i]);
                
menuSpacing += 30;
            }
        }
        
        
        public function 
makeSubMenu(targetNumber:uint,targetYPos:uint):void
        
{
            
// SubMenu Buttons
            
subMenuEntries[targetNumber] = new Array();
            if(
menues[targetNumber].length 1)
            {
                for(var 
j:uint 1;jmenues[targetNumber].length;j++)
                {
                    var 
subMenuTextField:TextField = new TextField();
                    var 
jCounter:int j-1;
                    
                    
subMenuTextField.menuPosX ;
                    
subMenuTextField.targetYPos ;
                    
subMenuTextField.width letterWidth ;
                    
subMenuTextField.height letterHeight ;
                    
subMenuTextField.selectable false;
                    
subMenuTextField.htmlText "<a href='event:Test2'>"+menues[targetNumber][j]+"</a>";
                    
subMenuTextField.addEventListener(MouseEvent.CLICKSubMenuOpen);
                    
subMenuEntries[targetNumber][jCounter] = subMenuTextField;
                }
                
            }
        }
        
        public function 
closeopenSubMenu(e:Event):void
        
{
            var 
targetNumber:Number e.target.name;
            var 
targetInc:uint targetNumber +1;
            
            
// falls das menu noch nicht offen ist dann.....
            
if((isOpenArr[targetNumber] == false) && (menues[targetNumber].length 1))
            {
                
subMenuSpacing 0;
                
                
//menues und submenues(falls schon vorhanden) nach unten verschieben
                
for(var a:uint targetInc;<= mainMenuItems.length-1;a++)
                {
                        
mainMenuItems[a].+= (menues[targetNumber].length -1) * (letterHeight);
                }
                for(var 
p:uint targetInc;menues.length;p++)
                        {
                            
                            if((
isOpenArr[p] == true) && (subMenuEntries[p]!=undefined) )
                                {
                                    for 
each(var obj:Object in subMenuEntries[p])
                                    {
                                        
obj.+= (menues[targetNumber].length -1) * (letterHeight);
                                        
trace(obj.y);
                                    }    
                                }
                        }
                
                var 
targetYPos:uint =mainMenuItems[targetNumber].y;
                
                
//erstellen des gewuenschten submenues
                
makeSubMenu(targetNumber,targetYPos);
                
                    
//bewegen des submenues
                    
for(var :uint 0;i<subMenuEntries[targetNumber].length;i++)
                    {
                        
subMenuSpacing += 30;
                        var 
spaceCount:Number targetYPos subMenuSpacing ;
                        
Tweener.addTween(subMenuEntries[targetNumber][i],{y:spaceCount,time:0.7,transition:"easeOutExpo"});
                        
subMenuEntries[targetNumber][i].menuPosX +10;
                        
addChild(subMenuEntries[targetNumber][i]);
                    }
                
isOpenArr[targetNumber] = true;
            }
            
            
            
            
// ist das menue schon offen dann......
            
else if ((isOpenArr[targetNumber] == true) &&(menues[targetNumber].length 1))
            {
                
// SubMenu zusammenziehen 
                
for(var r:uint targetInc;menues.length;r++)
                        {
                            
                            if((
isOpenArr[r] == true) && (subMenuEntries[r]!=undefined) )
                                {
                                    for 
each(var obj2:Object in subMenuEntries[r])
                                    {
                                        
obj2.-= (menues[targetNumber].length -1) * (letterHeight);
                                        
trace(obj2.y);
                                    }    
                                }
                        }
                
                
// Menu zusammenziehen und loeschen der elemente
                
for(var b:uint targetInc;<= mainMenuItems.length-1;b++)
                {
                        
mainMenuItems[b].-= (menues[targetNumber].length 1) * (letterHeight);
                }
                
                
// loeschen der submenues
                
for(var :int subMenuEntries[targetNumber].length j++)
                {
removeChild(subMenuEntries[targetNumber][j]);
                }
                
                
// loeschen der submenues aus dem array
                
                
for(var k:Number subMenuEntries[targetNumber].length;>= k-- )
                {
                    
subMenuEntries[targetNumber].pop();
                    
                }
                
subMenuSpacing 0;
                
isOpenArr[targetNumber] = false;
                
            }
            
        }
        
        public function 
SubMenuOpen(e:Event):void
        
{
            
trace("subclick");
        }
    }

Tucer ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
akkordeon menü, dynamisch, flex builder, menü, xml

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 16:09 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele