我正在编写一个拖放应用程序,我可以抓取一个对象,然后将它放在不同的对象容器上。当我拖动对象(按住鼠标按钮)并离开舞台时,我仍然可以用鼠标控制对象......这不是我想要的。
当鼠标离开舞台时,我想失去对象的控制权。
我尝试在MOUSE_LEAVE事件中删除MOUSE_DOWN的事件侦听器,但没有。
我还尝试在MOUSE_LEAVE事件上调度一个MOUSE_UP事件,但它也不起作用......只有在我手动释放鼠标按钮时它才有效。
当用户将鼠标移离屏幕但是他仍然按下鼠标按钮时,有没有办法覆盖MOUSE_DOWN事件? 任何建议???
提前致谢
答案 0 :(得分:1)
舞台实际上是在听MOUSE_LEAVE事件吗?无论如何,请查看这篇文章,它可能有所帮助: http://www.kirupa.com/developer/flashcs3/detecting_when_mouse_leaves_movie.htm
答案 1 :(得分:1)
这里有几个棘手的陷阱:
奇怪的是,在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}}
答案 2 :(得分:0)
我相信你在谈论用户点击鼠标完全离开Flash内容,当他/她返回时,它会继续进行吗?
我建议你跟踪鼠标x& y坐标。设置一个条件,当x或y分别等于舞台宽度或高度时触发鼠标向上事件处理程序。
答案 3 :(得分:0)
在flash影片外拖动对象时,该对象将触发MOUSE_OUT事件。您可以侦听此事件,使用变量检查是否正在拖动对象,如果是,则调度MOUSE_UP事件。
some_object.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
some_object.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
some_object.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
private function mouseOutHandler(e:MouseEvent):void
{
if (isDragging)
e.target.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_UP));
}
private function mouseDownHandler(e:MouseEvent):void
{
e.target.startDrag();
isDragging = true;
}
private function mouseUpHandler(e:MouseEvent):void
{
e.target.stopDrag();
isDragging = false;
}