【问题标题】:Flash: Correctly handling click-and-drag outside the browser?Flash:正确处理浏览器外的点击和拖动?
【发布时间】:2011-02-26 00:17:10
【问题描述】:

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

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

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

我已经尝试了“显而易见”的事情,在 MOUSE_MOVE 处理程序中检查了 event.buttonDown,但即使鼠标按钮向上,event.buttonDown 在第 2 步(上图)中也是 true

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

【问题讨论】:

标签: flash drag


【解决方案1】:

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

在鼠标被拖回的情况下,你或许能够检测到MOUSE_UP

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

【讨论】:

  • 不幸的是,MOUSE_UP 不会在鼠标移回时触发。而且,是的 - Flash 外部的鼠标行为取决于系统......但我关心当它重新进入时会发生什么Flash,它依赖于 Flash。
  • 所以我并不完全正确——MOUSE_UP 确实火了。但仅在某些浏览器上。请参阅 jpop 的答案中的 cmets。
【解决方案2】:

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

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

【讨论】:

  • 注意:请参阅下面 jpop 答案中的 cmets。显然MOUSE_UP 事件是由某些浏览器触发的,但不是其他浏览器(但是,据我所知,MOUSE_UP_SOMEWHERE 在任何地方都有效)。
【解决方案3】:

我遇到了类似的问题。我的解决方案:

在我的可拖动对象构造函数中:

addEventListener(MouseEvent.MOUSE_DOWN, onStartDrag);

在 onStartDrag() 我放了:

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

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

【讨论】:

  • 很遗憾,这不是真的 - 如果鼠标在 Flash 播放器之外释放,您不会收到 MOUSE_UP 事件。
  • 好吧,我不敢苟同。单击ewhent.com/Content/Player.aspx?t=1434,您可以看到上面包含的确切代码(实际上是直接从项目源中复制的)正在运行,与我描述的完全一样。至少,在我的 Windows 上的 10、0、22、87 Flash 播放器上,它对我有用。你有不同的行为?
  • 啊,很奇怪。似乎 OS X 上的 Safari确实在舞台外触发了MOUSE_UP,但 OS X 上的 Firefox不会。但是,FF 和 Safari 似乎都触发了 MOUSE_UP_SOMEWHERE 事件(请参阅我的回答)。咕噜咕噜。不管怎样,谢谢你让我直截了当。
猜你喜欢
  • 2013-03-13
  • 1970-01-01
  • 1970-01-01
  • 2011-06-29
  • 2014-07-24
  • 1970-01-01
  • 2013-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多