2010-09-22 25 views
0

我已經創建了一個帶有標題欄的簡單面板,並且我試圖在MouseEvent.MOUSE_DOWN,MouseEvent.MOUSE_CLICK和MouseEvent.DOUBLE_CLICK之間共享標題欄。鼠標向下,面板可拖動,鼠標點擊面板摺疊並展開,鼠標雙擊面板隱藏。ActionScript - 使用多個鼠標事件顯示對象?

我努力使這些全部與面板的標題欄精靈一起工作。鼠標向下時會激活點擊,等等。是否可以在同一個對象上區分這些鼠標事件?


我忘了提,我是編程的AIR應用程序,因此,雖然我相信下面帕特里克的解決方案將針對定製拖放功能的常規.swf文件或一個工作,我真的不可以訪問nativeWindow的startMove()函數。然而,我設法通過輪詢nativeWindow的位置來共享面板的MOUSE_DOWN和MOUSE_CLICK事件之間的titleBar對象。

private function titleBarMouseDownEventHandler(evt:MouseEvent):void 
    { 
    windowCoords = new Point(stage.nativeWindow.x, stage.nativeWindow.y); 
    stage.nativeWindow.startMove(); 
    } 

private function titleBarClickEventHandler(evt:MouseEvent):void 
    { 
    if (stage.nativeWindow.x != windowCoords.x && stage.nativeWindow.y != windowCoords.y) 
     return; 

    //expand & collapse code 
    } 

回答

1

是的,你可以檢查的事件類型,並添加一個條件爲你的函數來執行

 

private function mouseEventHandler(event:MouseEvent):void 
{ 
    switch(event.type) 
    { 
     case MouseEvent.MOUSE_DOWN: 
       dragClip(); 
       break; 

     case MouseEvent.CLICK: 
       removeListeners(); 
       clickHandler(); 
       break; 
    } 

} 

private function dragClip():void 
{ 
    //remove listeners while you're dragging 
    //add them back on mouse up 
    removeListeners(); 
} 

private function clickHandler():void 
{ 
    //do what you need 
    //then re-add the event listeners when the action is done 
    addListeners(); 
} 

,如果你仍然不能區分使用這種方法,您可能需要創建第二個處理器衝突的功能...來想想它,你也可以考慮禁用其他鼠標事件處理程序,當一個是活躍的......只是一個想法

+0

當然,我可以將它們全部發送到他們自己的監聽器功能或檢查哪個事件類型被激活,但問題是一個會引發另一個事件類型。例如:我將鼠標放在面板上將其拖動到新的位置,但是當我放開鼠標時,面板將展開/摺疊,因爲展開/摺疊操作正在監聽鼠標單擊。我嘗試刪除mousedown的click事件監聽器並在mouseup中重新添加它,但結果是click事件從未發生過。 – TheDarkIn1978 2010-09-22 14:50:31

+0

您可能必須建立某種形式的優先級,假設您使用switch語句,使用event.type,第一個語句將優先 – PatrickS 2010-09-22 14:55:23

+0

唯一我能想到的其他事情是使用定時器,但那會是超級貧民窟。 – TheDarkIn1978 2010-09-22 14:59:55

0

是的,但你必須小心你的聲明的順序事件(不知道哪一個應該先走,儘管......)。