2

我有 2 个彼此不相关的单独事件,每个事件分别附加到 Mouseclick 和 Doubleclick 事件响应。但是,在运行时,我发现即使双击,Mouseclick 操作仍然会被激活。

我一直在尝试找到一个可行的解决方案,其中 Mouseclick 和 Doubleclick 可以相互独立地共存,但到目前为止还没有运气。我什至尝试过让 mouseclick eventresponse 在启动前等待几毫秒(以便用户有机会双击),但这也不是最有效的解决方案。

有没有人有任何想法?或者可以指出我可以更好地了解如何在 Flash 中捕获 Mouseclick 和 Doubleclick 事件响应的地方?

我一直在环顾四周,但未能找到足够深入的内容来提及每个事件响应的实际工作方式。

4

5 回答 5

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         
}
于 2010-10-08T20:35:08.360 回答
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
{

}
于 2009-05-28T16:35:14.880 回答
0

这样,您只需杀死(想要的)点击事件。正如他所说,两个处理程序彼此不认识,所以你不能为别人杀死处理程序,这是非常糟糕的做法。

据我了解,他两者都想要。因此,“doubleClickEnabled”应该会导致 clickEvent 处理延迟,因此如果同时发生第二次点击,它可以被 doubleClick 事件替换。

但事实并非如此,这两个事件都会被触发。这种行为是出乎意料的——一旦为 InteractiveObject 启用了“doubleClickEnabled”,每次单击都应该有明显的延迟,因为 doubleClick 处理程序仍在等待可能的第二次单击。如果等待时间结束,则会触发正常的点击事件。

仍然有同样的问题,没有巧妙的解决方案。

于 2010-10-22T13:55:33.217 回答
0

我的经验是,这至少部分是设计使然。从 UI 的角度来看,这很容易带来很大的风险。在任何情况下,用户都不一定擅长快速单击以向您提供区别。如果他们不确定点击是否正确,他们可能会重新点击太快,以至于您无法区分。

想一想当您双击时在任何 ol' 应用程序中会发生什么(因为我认为这种情况并不少见)。当我现在正在输入此内容时,如果我双击文本中的其他位置,则会选择并突出显示一个单词,并且光标会消失;它可能在第一次单击后被定位,然后被双击处理程序取消。

于 2009-05-28T16:41:26.867 回答
0

由于双击速度是由用户设置的,如果用户将双击速度设置为非常慢1 ,则计时器可能无法工作。

一种解决方法可能是在 500 毫秒(Windows 中的默认时间)内通过两次单击实现您自己的双击。

根据第一次单击的作用,您可以反转第一次单击的行为。例如,如果第一次单击使文件夹反转颜色,则第二次单击可以打开文件夹并取消反转它。

于 2009-07-01T09:22:38.563 回答