2010-09-22 2 views
0

Я создал простую панель с заголовком, и я пытаюсь разделить строку заголовка между MouseEvent.MOUSE_DOWN, MouseEvent.MOUSE_CLICK и MouseEvent.DOUBLE_CLICK. oh мышь вниз, панель перетаскивается, при щелчке мыши панель обрушивается и расширяется, а при двойном щелчке мыши панель скрыта.ActionScript - Показать объект с несколькими событиями мыши?

Я изо всех сил стараюсь, чтобы все они работали с одним и тем же заголовком панели управления. mouse down активирует щелчок мышью, и т. д. возможно ли, чтобы эти события мыши были различимы на одном и том же объекте?


я забыл упомянуть, что я буду программировать приложения AIR, так что пока я считаю, что решение Patricks Это ниже будет работать для обычного файла .swf или тот, который имеет пользовательский перетаскивание функции, я не очень имеют доступ к функции startMove() nativeWindow. однако мне удалось передать объект titleBar панели между событиями MOUSE_DOWN и MOUSE_CLICK путем опроса для позиции nativeWindow.

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

уверен, я могу отправить их всем своим функциям слушателя или проверить, какой тип события активирован, но проблема в том, что один отправляет другой. например: i мышь на панели, чтобы перетащить его в новое место, но когда я отпустил мышь, панель будет расширяться/сжиматься, так как действие expand/collapse выполняется при щелчке мышью. Я попытался удалить прослушиватель событий клика для mousedown и повторно добавить его в mouseup, но результатом этого является то, что событие click никогда не произойдет. – TheDarkIn1978

+0

, возможно, вам придется установить какую-то форму приоритета, скажем, что вы используете оператор switch, используя event.type, первый оператор будет иметь приоритет – PatrickS

+0

, единственное, что я могу придумать, это использовать таймеры, но это будет супер гетто. – TheDarkIn1978

0

Да, но вы должны быть осторожны с порядком объявления своих события (не уверен, что нужно идти первым, хотя ...).

Смежные вопросы