我只是把这个超级简单的代码示例抛到了Flash框架脚本中,但是它没有在控制台中输出任何内容。我只是把鼠标滚动到窗口上,没有点击任何东西,什么也没发生。为什么这不能像我预期的那样起作用?
stage.addEventListener(Event.MOUSE_LEAVE, traceMouse);
function traceMouse(Evt:Event):void
{
trace("Mouse Left Stage");
}
________________________________________________
编辑我发现Event.MOUSE_LEAVE极其无用。首先,它不能在测试环境中工作(至少在Mac的Flash上)。其次,如果MouseEvent.MOUSE_DOWN当前处于活动状态,则不会触发:
Flash CS4 Professional ActionScript 3.0语言参考资料:
更新8/11/09:添加的限定条件是在按下按钮时不触发该事件。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();
}
发布于 2010-04-07 21:20:04
我不认为这个特定事件在创作环境中有效,请尝试发布html包装并在浏览器中运行它。
发布于 2011-05-18 19:57:45
在浏览器中运行时,还需要知道另外几件棘手的事情:
奇怪的是,在Chrome + Firefox中,MOUSE_LEAVE事件不会被发送到WMODE of OPAQUE
或TRANSPARENT
。它只是不开火-鼠标向下或向上。
对于WINDOW
,它工作得很好。那个花了我很长时间才发现的!老爹..。http://bugs.adobe.com/jira/browse/FP-892
其次,确保使用Event
作为Event.MOUSE_LEAVE
处理程序的参数类型,而不是MouseEvent
。如果您尝试使用MOUSE_LEAVE
处理e:MouseEvent
,您将得到一个您可能看不到的错误(除非您使用的是调试闪存)。这是一个很容易犯的错误,因为您可能将所有其他处理程序指向相同的方法。
下面是我所做的工作:(只需从mouseLeave(e:Event)
调用我的主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
}
https://stackoverflow.com/questions/2595995
复制相似问题