我有2个彼此无关的单独事件,每个事件分别附加到Mouseclick和Doubleclick事件响应。但是,在运行时,我发现即使我双击,Mouseclick操作仍会被激活。
我一直在努力找到一个可行的解决方案,其中Mouseclick和Doubleclick可以相互独立共存但到目前为止没有运气。我甚至尝试让mouseclick eventresponse在开始之前等待几毫秒(这样它就有机会让用户双击)但这也不是最有效的解决方案。
有没有人有任何想法?或者可以指出一个地方,我可以更好地了解如何在Flash中捕获Mouseclick和Doubleclick事件响应?
我一直在环顾四周,但却找不到足够深入的内容,提到每个事件响应实际上是如何工作的。
答案 0 :(得分:4)
无需使用计时器。请按照:
someMovieClip.doubleClickEnabled = true;
someMovieClip.addEventListener(MouseEvent.DOUBLE_CLICK, someFunction);
function someFunction(e:MouseEvent):void {
someMovieClip.removeEventListener(MouseEvent.CLICK, clickFunction);
// statement for double click action
}
答案 1 :(得分:1)
我认为你必须使用计时器,这是区分两者的唯一方法。 AS的单线程事件驱动特性存在一些问题,您必须注意这些问题;我想我会像这样实现它:
var timer:Timer = new Timer(100,1);
private function clickHandler(event:MouseEvent):void
{
timer.addEventListener(TimerEvent.TIMER, singleClickHandler);
timer.start();
}
private function doubleClickHandler(event:MouseEvent):void
{
timer.stop();
...
}
private function singleClickHandler(event:TimerEvent):void
{
}
答案 2 :(得分:0)
我的经验是,这至少部分是设计上的。从UI的角度来看,它很容易存在风险。用户不一定擅长快速点击以在任何情况下为您提供区别。如果他们不确定他们是否正确点击,他们可能会过快地重新点击以便您区分。
当你双击时想想任何ol应用程序会发生什么(因为我想这种情况并不罕见)。正如我现在正在键入此内容,如果我双击文本中的其他位置,则会选择并突出显示一个单词,并且光标会消失;它可能在第一次单击后定位,然后通过双击处理程序无效。
答案 3 :(得分:0)
由于双击速度是由用户设置的,如果用户将双击速率设置得非常慢1,则计时器可能无效。
解决方法可能是在500毫秒内(Windows中的默认时间)两次单击即可实现自己的双击。
根据第一次点击的作用,您可以反转第一次点击的行为。例如,如果第一次单击使文件夹反色,则第二次单击可以打开文件夹并取消反转。
答案 4 :(得分:0)
这样你就可以杀死(想要的)点击事件。正如他所说,两个处理程序都不会互相认识,所以你不能杀死别人的处理,这是非常糟糕的做法。
根据我的理解,他想要两者。因此“doubleClickEnabled”应该导致clickEvent处理延迟,因此如果在此期间发生第二次单击,它可以被doubleClick事件替换。
但事实并非如此,两个事件都将被触发。此行为是意外的 - 只要为InteractiveObject启用“doubleClickEnabled”,每次单击都应该有明显的延迟,因为doubleClick处理程序仍然等待可能的第二次单击。如果等待的时间结束,则会触发正常的click事件。
仍有同样的问题,没有光滑的解决方案。