

In ActionScript3 event driven programming plays a major part with mouse or key pressed and even a text field having events associated with them. Events indicate action e.g. mouse press corresponds to “mouse down” event and vice versa is “mouse up” event.
To check if mouse release (mouseUp -Event.MOUSE_UP)) has happened on the target object on which mouse down - Event.MOUSE_DOWN took place or a “mouse up outside “event when mouse up has not happened on the target object; there is no predefined event with AS3 unlike its earlier versions that had “onReleaseOutside event”.
To resolve this, we need to add stage event handler for mouse up in mouse down event handler. By adding stage event handler for mouse up will detect any global mouse up event. Hence it will check if the event associates the target object that has mouse down event earlier or it was a mouse up outside event not related with the target object.
Package {
Import flash.display.DisplayObject;
import flash.events.*;
public var child: DisplayObject = new DisplayObject ();
public function childdown(event:MouseEvent):void
{
// mouse up event happens only when there is mouse down
trace("child mouse down");
stage.addEventListener(MouseEvent.MOUSE_UP,childUpOutside);
}
Public function childUpOutside (event:MouseEvent):void
{
if (event.target != child)
{
trace("child mouse up outside");
}
stage.removeEventListener(MouseEvent.MOUSE_UP, childUpOutside);
}
}
If you would like to make a comment, please fill out the form below.
Have you seen:
FlexMouseEvent.MOUSE_DOWN_OUTSIDE
Campbell
A quick comment to stop newbie AS3.0 devs being misled:
FlexMouseEvent is only any good if you’re building apps that leverage the Flex Framework. This article discusses AS3.0, with no specific reference to Flex. The example above offers the only solution available to detecting MOUSE_UP events outside of the boundary of the DisplayObject that received the MOUSE_DOWN event.
what about mouse up outside the actual flash movie. how would you capture that?
Correct me if I’m wrong but the above will not work in flash. From what I understand, event.target always returns the dispatcher, since the stage is the dispatcher of the event the target will always be the stage. But, I am a flash guy and maybe this model is different in flex.
You could also use FlexMouseEvent.MOUSE_DOWN_OUTSIDE
addEventListener(FlexMouseEvent.MOUSE_DOWN_OUTSIDE, ListDropMenu_MouseDownOutside, false, 0, true);