Существует событие, которое отправляется при открытии контекстного меню (меню правой кнопки мыши) в сценарии действий для flash:
ContextMenuEvent.MENU_SELECT
Теперь, есть ли событие, которое отправляется, когда меню закрыто?
Существует событие, которое отправляется при открытии контекстного меню (меню правой кнопки мыши) в сценарии действий для flash:
ContextMenuEvent.MENU_SELECT
Теперь, есть ли событие, которое отправляется, когда меню закрыто?
Хороший вопрос. Это было бы хорошим запросом функции, событием 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, поэтому клипы под ним могут получать клики. Возможно, вы захотите, чтобы этот был прозрачным. Я использовал это, чтобы вы получали событие, когда щелкаете правой кнопкой мыши по нему. Когда это происходит, я устанавливаю для параметра rightClicking значение true, что означает, что я знаю, что был нажат правый щелчок, и просто жду, когда произойдет что-то еще. Есть два варианта:
Для варианта 1, если пользователь выбирает любой из ваших пользовательских элементов, это круто, вы можете справиться с этим, если нет, по крайней мере, вы знаете, что может произойти. Для варианта 2 я настроил прослушиватель для события MOUSE_DOWN, поэтому, если правый щелчок был включен, и вы нажали кнопку мыши, это закроет ваше меню.
Надеюсь это поможет!
Я знаю, это похоже на халтурный олдскульный as2, и код изменен из примера документации, но это мысль :)