Flash:正确处理浏览器外部的点击并拖动?

时间:2010-05-31 14:21:19

标签: flash drag

从Flash中检测有人在浏览器中开始拖动的正确方法(例如,MOUSE_DOWN事件),将鼠标拖到浏览器窗口外,释放按钮,然后移动鼠标,这是正确的方法回到浏览器上?

例如(假设StackOverflow是Flash应用程序):

alt text http://img.skitch.com/20100531-t99mni7s8sjs8ycqe5ebyaxphm.png

我尝试了“显而易见”的事情,检查event.buttonDown处理程序中的MOUSE_MOVE,但即使鼠标按钮已启动,event.buttonDown仍然是true 2(上)。

那么,还有其他方法来检查鼠标按钮的“真实”状态吗?或者任何其他方式来处理这种情况?

3 个答案:

答案 0 :(得分:2)

在对Flex源进行一些挖掘之后,似乎他们使用了SandboxMouseEvent.MOUSE_UP_SOMEWHERE事件。一些有限的测试表明,这是在Flash之外正确检测鼠标的一种方法(尽管使用Flex):

var sbroot:DisplayObject = Application.application.systemManager.getSandboxRoot();
sbroot.addEventListener(SandboxMouseEvent.MOUSE_UP_SOMEWHERE, handleDragComplete);

答案 1 :(得分:1)

我有类似的问题。我的解决方案:

在draggable对象构造函数中,我有:

addEventListener(MouseEvent.MOUSE_DOWN, onStartDrag);

在onStartDrag()中我放了:

stage.addEventListener(MouseEvent.MOUSE_MOVE,onDrag);
stage.addEventListener(MouseEvent.MOUSE_UP, onDrop);

无论鼠标指针位置如何,只要鼠标移动,我们在Flash播放器外部会收到通知,并在释放按钮时立即收到MOUSE_UP通知。可能不适用于您的特定情况,但对我来说就像一个魅力。不要忘记在onDrop()中删除MOVE和UP侦听器。

答案 2 :(得分:0)

对于鼠标离开工作区的情况,请尝试:MouseEvent.MOUSE_OUT

在拖回鼠标的情况下,您可以检测到MOUSE_UP

鼠标在Flash应用程序之外的行为完全取决于操作系统和浏览器,并且闪存中对它的任何访问都是最不一致的。