我只是将这个超级简单的代码示例放入Flash CS4 IDE框架脚本中,但它不会在控制台中输出任何内容。我只是将鼠标翻过窗户,没有点击任何东西,也没有发生任何事情。为什么这不能像我期望的那样工作?
stage.addEventListener(Event.MOUSE_LEAVE, traceMouse);
function traceMouse(Evt:Event):void
{
trace("Mouse Left Stage");
}
________________________________________________
[编辑] 我觉得Event.MOUSE_LEAVE非常无用。首先,它在测试环境中不起作用(至少在Mac OS X的Flash CS4上)。第二,如果MouseEvent.MOUSE_DOWN当前处于活动状态,它不会触发:
Flash CS4 Professional ActionScript 3.0语言参考:
2009年8月11日更新:增加了资格 当按钮是,该事件不会被触发 按压。1
在我的特殊情况下,我希望MOUSE_LEAVE在我拖动一个对象时触发,这样如果用户将他/她的鼠标指针拖离舞台,它将触发stopDrag()。因为那是不可能的,所以我决定在实际对象上使用MOUSE_OUT,而不是在对象的父级或舞台上使用MOUSE_LEAVE。
private function mouseDownHandler(evt:MouseEvent):void
{
object.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
object.startDrag(false, pullBounds);
}
private function mouseUpHandler(evt:MouseEvent):void
{
object.removeEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
object.stopDrag();
}
private function mouseOutHandler(evt:MouseEvent):void
{
object.stopDrag();
}
答案 0 :(得分:3)
这里还有一些其他棘手的事情要知道(在浏览器中运行时):
奇怪的是,在Chrome + Firefox中,不会为OPAQUE
TRANSPARENT
或WINDOW
调度MOUSE_LEAVE事件。它只是不会发射 - 鼠标向下或向上。
使用Event
它可以正常工作。那个花了我很长时间才发现! grr ... WMODE
其次,请确保您使用Event.MOUSE_LEAVE
作为MouseEvent
处理程序的参数类型,而不是MOUSE_LEAVE
。如果您尝试使用e:MouseEvent
处理endDrag
,您将收到一个您可能永远看不到的错误(除非您使用的是调试Flash播放器)。这是一个非常容易犯的错误,因为你可能将所有其他处理程序指向同一个方法。
以下是我的工作:(只需从mouseLeave(e:Event)
stage.addEventListener(MouseEvent.MOUSE_MOVE, drag);
stage.addEventListener(MouseEvent.MOUSE_UP, endDrag);
stage.addEventListener(Event.DEACTIVATE, endDrag);
stage.addEventListener(Event.MOUSE_LEAVE, mouseLeave);
private function mouseLeave(e:Event):void
{
endDrag(new MouseEvent("MOUSE_LEAVE"));
}
public function endDrag(evt:MouseEvent):void
{
/// handle end drag
}
{{1}}
答案 1 :(得分:1)
我不认为这个特定事件在创作环境中有效,尝试发布一个html包装并在浏览器中运行它。