# AS3 Dynamic menu

**URL:** <https://forum.kirupa.com/t/as3-dynamic-menu/304337>\
**Category:** flash\
**Created:** [February 5, 2010, 5:40pm UTC](https://forum.kirupa.com/t/as3-dynamic-menu/304337 "2010-02-05T17:40:30Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![maidbarion](https://avatars.discourse-cdn.com/v4/letter/m/f475e1/32.png) [@maidbarion](https://forum.kirupa.com/u/maidbarion)\
**Post date:** [February 5, 2010, 5:40pm UTC](https://forum.kirupa.com/t/as3-dynamic-menu/304337/1 "2010-02-05T17:40:30Z")

</div>

Hi Guys!

I’m having a bit of trouble getting a dynamic menu to work is AS3. Here’s the code…

import caurina.transitions.Tweener;  
import caurina.transitions.properties.ColorShortcuts;  
ColorShortcuts.init();

var menu:Array = new Array (“1”,“2”,“3”,“4”,“5”);  
var \_open:Boolean = false;  
var menuTab:MenuTab = new MenuTab();  
var off:Object;

function \_addMenu():void  
{  
addChild(menuTab);

```
    menuTab.addEventListener(MouseEvent.ROLL_OUT, mOut);
    menuTab.addEventListener(MouseEvent.ROLL_OVER, mOver);
    
    for (var i:int = 0; i &lt; menu.length; i++) 
    {
        var holder:MovieClip = new MovieClip();
        var menuItem:MenuItem = new MenuItem();
        menuItem.tf.txt.text = menu*;
        menuItem.name = "menu" + i;
        menuItem.buttonMode = true;
        menuItem.visible = true;
        menuItem.mouseChildren = false;
        menuItem.addEventListener(MouseEvent.ROLL_OUT, bOut);
        menuItem.addEventListener(MouseEvent.ROLL_OVER, bOver);
        menuItem.addEventListener(MouseEvent.CLICK, bClick);
        holder.addEventListener(MouseEvent.ROLL_OUT, mOut);
        holder.addEventListener(MouseEvent.ROLL_OVER, mOver);
        holder.addChild(menuItem);
        addChildAt(holder, 0)
        menu* = holder
    }    
}

```

function mOver( e:MouseEvent )  
{  
if( !\_open )  
{  
for( var i=0; i\<menu.length; i++ )  
{  
var item:DisplayObject = menu\*  
item.visible = true;  
Tweener.addTween(item, {alpha:1, y:(item.height-1)\*i, time:.3, transition:“easeOut” } );  
}  
}  
\_open = true;  
}

function mOut( e:MouseEvent )  
{  
if( \_open )  
{  
for( var i=0; i\<menu.length; i++ )  
{  
var item:DisplayObject = menu\*  
item.visible = true  
Tweener.addTween(item, {alpha:0, y:0, time:1, transition:“easeOut” } );  
}  
}  
\_open = false;  
}

function bOver( e:MouseEvent )  
{  
Tweener.addTween(e.target.bg, { \_color:0x222222, time:2, transition:“easeOutExpo” } );  
}

function bOut(e:MouseEvent):void  
{  
Tweener.addTween(e.target.bg, { \_color:null, time:2, transition:“easeOutExpo” } );  
}

function bClick(e:MouseEvent):void  
{  
if (off != null) {  
off.buttonMode = true;  
off.addEventListener(MouseEvent.ROLL\_OUT, bOut);  
off.addEventListener(MouseEvent.ROLL\_OVER, bOver);  
off.addEventListener(MouseEvent.CLICK, bClick);  
off.dispatchEvent(new MouseEvent(MouseEvent.ROLL\_OUT));

```
    }
    e.target.buttonMode = false;
    e.target.removeEventListener(MouseEvent.ROLL_OUT, bOut);
    e.target.removeEventListener(MouseEvent.ROLL_OVER, bOver);
    e.target.removeEventListener(MouseEvent.CLICK, bClick);
    off = e.target;
}    

```

\_addMenu();

…

So anyway everything seems to be working fine apart from the dispatchEvent snippet…

off.dispatchEvent(new MouseEvent(MouseEvent.ROLL\_OUT));

I want the menu to stay open after I click another button and only the roll over to change. I know i’ve got a ROLL\_OUT listener to control the actual menu itself and this is where the issue is. Is there any other way of going about this? I’m new to AS3 and your help would be greatly appreciated. 🙂

Cheers
