Event.MOUSE_LEAVE 在 AS3 中不起作用
Posted
技术标签:
【中文标题】Event.MOUSE_LEAVE 在 AS3 中不起作用【英文标题】:Event.MOUSE_LEAVE not working in AS3 【发布时间】:2011-02-05 11:06:22 【问题描述】:我只是将这个超级简单的代码示例扔到 Flash CS4 IDE 框架脚本中,但它不会在控制台中输出任何内容。我只是在窗口上滚动鼠标,没有点击任何东西,什么也没有发生。为什么这不符合我的预期?
stage.addEventListener(Event.MOUSE_LEAVE, traceMouse);
function traceMouse(Evt:Event):void
trace("Mouse Left Stage");
________________________________________________
[EDIT] 我发现 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();
【问题讨论】:
它适用于我的 Flash CS4 IDE (Win XP),但事实上它在按下鼠标时不起作用,这使得它完全没用。 Adobe 这些天真的很烦我。顺便说一句,你在哪里找到的笔记?那个链接失效了。 它是在 flash.display.Stage.mouseLeave 下的 Flash 10.1 的 10.0 文档中编写的,但他们似乎已将其删除。 【参考方案1】:这里有一些额外的棘手的事情要知道(在浏览器中运行时):
奇怪的是,在 Chrome + Firefox 中,对于 WMODE 或 OPAQUE
或TRANSPARENT
没有调度 MOUSE_LEAVE 事件。它只是不会触发 - 鼠标向下或向上。
使用WINDOW
可以正常工作。那个我花了很长时间才发现! grr...http://bugs.adobe.com/jira/browse/FP-892
其次,确保您使用Event
作为Event.MOUSE_LEAVE
处理程序的参数类型,而不是MouseEvent
。如果您尝试使用e:MouseEvent
处理MOUSE_LEAVE
,您将收到一个您可能永远不会看到的错误(除非您使用的是调试Flash 播放器)。这是一个非常容易犯的错误,因为您可能将所有其他处理程序都指向同一个方法。
这就是我的工作:(只需从mouseLeave(e:Event)
调用我的主要endDrag
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
【讨论】:
@TheDarkIn1978 我知道你没有在这里犯第二个错误 - 但我总是忘记这一点,很容易错过【参考方案2】:我认为这个特定事件在创作环境中不起作用,请尝试发布一个 html 包装器并在您的浏览器中运行它。
【讨论】:
在发布之前我用谷歌搜索了这个问题。似乎有些人无法让它与 IDE 一起工作,而另一些人则认为他们疯了,它对他们有用没问题。它可能是一个设置吗?是的,在浏览器中发布时它确实对我有用 它可能与操作系统相关或其他原因,我尽可能远离 Flash 创作代码类型的东西,所以我从来没有真正遇到过这种情况。 这是一个聪明的理论。如果您是正确的,我不会感到惊讶,因为 MouseEvent.MOUSE_WHEEL 在 Mac OS X 上根本不起作用(这是我正在使用的)以上是关于Event.MOUSE_LEAVE 在 AS3 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章