从Flash中检测有人在浏览器中开始拖动的正确方法(例如,MOUSE_DOWN
事件),将鼠标拖到浏览器窗口外,释放按钮,然后移动鼠标,这是正确的方法回到浏览器上?
例如(假设StackOverflow是Flash应用程序):
alt text http://img.skitch.com/20100531-t99mni7s8sjs8ycqe5ebyaxphm.png
我尝试了“显而易见”的事情,检查event.buttonDown
处理程序中的MOUSE_MOVE
,但即使鼠标按钮已启动,event.buttonDown
仍然是true
2(上)。
那么,还有其他方法来检查鼠标按钮的“真实”状态吗?或者任何其他方式来处理这种情况?
答案 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应用程序之外的行为完全取决于操作系统和浏览器,并且闪存中对它的任何访问都是最不一致的。