Actionscript 3 ContextMenu关闭事件?

时间:2009-09-03 15:33:47

标签: actionscript-3 events contextmenu

当flash的actionscript中的上下文菜单(右键菜单)被打开时,会调度一个事件:

ContextMenuEvent.MENU_SELECT

现在,是否有一个事件在菜单关闭时被调度?

1 个答案:

答案 0 :(得分:2)

好问题。 这将是一个很好的功能请求,一个ContextMenuEvent.MENU_CLOSED事件:)

我想我有一半你的答案。这是我的想法:

var myContextMenu:ContextMenu = new ContextMenu();
var menuLabel:String = "Custom Item";
var rightClicking:Boolean;

addCustomMenuItems();
myContextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, menuSelectHandler);
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseUpHandler);
    var redRectangle = makeRedRectangle();
    redRectangle.contextMenu = myContextMenu;


function makeRedRectangle():Sprite{
    redRectangle = new Sprite();
    redRectangle.graphics.beginFill(0x990000,.2);
    redRectangle.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
    redRectangle.mouseChildren = false;
    addChild(redRectangle);
    return redRectangle;
}

function addCustomMenuItems():void {
    myContextMenu.hideBuiltInItems();
     var item:ContextMenuItem = new ContextMenuItem(menuLabel);
     myContextMenu.customItems.push(item);
     item.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemSelectHandler);
}

function menuSelectHandler(event:ContextMenuEvent):void {
     trace("menuSelectHandler: " + event);
     rightClicking = true;
}

function menuItemSelectHandler(event:ContextMenuEvent):void {
     trace("menuItemSelectHandler: " + event);
}

function mouseUpHandler(event:MouseEvent):void{
    if(rightClicking){
        trace('ContextMenu Closed\nThank You! Come Again!');
        rightClicking = false;
    }
}

基本上我创建了一个位于所有内容之上的精灵,但是将mouseChildren设置为false,因此下面的剪辑可以获得点击。你可能希望这个透明。我使用了这个,所以当你右键点击它时会触发一个事件。当发生这种情况时,我将右键单击设置为true,这意味着,我知道右键单击已被按下,我只是在等待其他事情发生。有两种选择:

  1. 用户从菜单中选择一个项目。
  2. 用户点击此按钮可使菜单消失。
  3. 对于选项1,如果用户选择了您的任何自定义项目,那很酷,您可以处理,如果没有,至少您知道会发生什么。 对于选项2,我已经为MOUSE_DOWN事件设置了监听器,所以如果右键单击打开并且你按下了鼠标,那就是你的菜单关闭。

    希望这有帮助!

    我知道,它看起来像hacky old school as2,代码是从文档示例中修改的,但这是一个想法:)