我最終做了什麼(從上面的回覆中得到靈感)設置了一個超時,讓鼠標有時間旅行,然後在該超時處理程序中使用hitTestPoint檢查鼠標是否在任一組件上。這裏是代碼:
private var timeout:uint;
/**
* On mouse out of item renderer set timeout
* */
protected function _mouseOutHandler(event:MouseEvent):void {
if (data.subCategories.length>0) {
timeout = setTimeout(checkToClose, 150);
}
}
/**
* Handles when mouse moves out of drop down
* */
protected function _menuMouseOutHandler(event:MouseEvent):void {
checkToClose();
}
/**
* Check if mouse is out of drop down and category renderer
* */
public function checkToClose():void {
var point:Point;
clearTimeout (timeout);
// check if drop down is open
if (menu.dropDown) {
point = localToGlobal(new Point(mouseX, mouseY));
menu.dropDown.addEventListener(MouseEvent.MOUSE_OUT, _menuMouseOutHandler, false, 0, true);
// check if we are over drop down or category renderer
// if not close dropdown
if (!menu.dropDown.hitTestPoint(point.x, point.y)
&& !hitTestPoint(point.x, point.y)) {
menu.dropDown.removeEventListener(MouseEvent.MOUSE_OUT, _menuMouseOutHandler);
menu.closeDropDown(false);
}
}
}
這就是我要回落。不幸的是,它不會每次都有效。如果一個組或對象是透明的,它將會錯過該對象。如果有人使用此方法,則需要檢查owner屬性以獲取組件(不是父項,儘管它們可以相同)。 – 2011-12-27 17:07:00
@ 1。21千兆如果它真的是透明的,那麼按鈕就會丟失,但是如果你只是在其皮膚上填充一個「Rect」並將它的alpha設置爲0,它將會被擊中。 – RIAstar 2011-12-27 21:08:50