Event.MOUSE_LEAVE无法在AS3中运行

时间:2010-04-07 21:15:06

标签: actionscript-3 mouseevent

我只是将这个超级简单的代码示例放入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();
  }

2 个答案:

答案 0 :(得分:3)

这里还有一些其他棘手的事情要知道(在浏览器中运行时):

奇怪的是,在Chrome + Firefox中,不会为OPAQUE TRANSPARENTWINDOW调度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包装并在浏览器中运行它。