Во Flash AS3, есть ли способ обнаружить действие DoubleClick без его обнаружения MouseClick? - PullRequest
2 голосов
/ 28 мая 2009

У меня есть 2 отдельных события, которые не связаны друг с другом, и каждое из них прикреплено к событиям Mouseclick и Doubleclick соответственно. Однако во время выполнения я обнаружил, что даже при двойном щелчке действие Mouseclick все равно активируется.

Я пытался найти жизнеспособное решение, в котором Mouseclick и Doubleclick могут сосуществовать независимо друг от друга, но пока не повезло. Я даже пытался подождать, пока отклик события mouseclick подождал несколько миллисекунд, прежде чем начать работу (чтобы дать пользователю возможность дважды щелкнуть мышью), но это тоже не самое эффективное решение.

У кого-нибудь есть идеи? Или можете указать мне место, где я могу получить гораздо лучшее представление о том, как ответы на события Mouseclick и Doubleclick записываются во флэш-памяти?

Я оглядывался по сторонам, но не смог найти достаточно подробностей, в которых бы упоминалось, как на самом деле работает каждое из событий.

Ответы [ 5 ]

4 голосов
/ 09 октября 2010

Нет необходимости использовать таймер. Просто следуйте этому:

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 голос
/ 28 мая 2009

Я думаю, вам придется использовать таймер, это единственный способ провести различие между ними. Есть некоторые проблемы с однопоточным управляемым событиями характером 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
{

}
0 голосов
/ 22 октября 2010

Таким образом, вы просто убиваете (хотел) событие click. И как он сказал, оба обработчика не знают друг друга, поэтому вы не можете убить обработку для других, это очень плохая практика.

Насколько я понимаю, он хочет и того, и другого. Поэтому «doubleClickEnabled» должно приводить к задержке обработки clickEvent, поэтому его можно ЗАМЕНИТЬ с помощью события doubleClick, если за это время происходит второй щелчок.

Но это не так, оба события будут вызваны. Это поведение неожиданно - как только «doubleClickEnabled» будет включен для InteractiveObject, каждый отдельный щелчок должен иметь заметную задержку, потому что обработчик doubleClick все еще ожидает возможный второй щелчок. Если время ожидания истекло, происходит обычное событие щелчка.

У меня все еще та же проблема, и у нее нет подходящего решения.

0 голосов
/ 01 июля 2009

Поскольку скорость двойного щелчка устанавливается пользователем, таймер может не работать, если пользователь установил частоту двойного щелчка очень медленно 1 .

Обходной путь может заключаться в реализации собственного двойного щелчка двумя щелчками мыши в течение 500 мс (время по умолчанию в Windows).

В зависимости от того, что делает первый щелчок, вы можете просто изменить поведение первого щелчка. Например, если первый щелчок делает папку инвертированным, тогда второй щелчок может открыть и удалить папку.

0 голосов
/ 28 мая 2009

Мой опыт показывает, что это, по крайней мере, частично задумано. Это может быть довольно рискованно с точки зрения пользовательского интерфейса. Пользователи не обязательно умеют нажимать достаточно быстро, чтобы в любом случае выделить вас. И если они не уверены, что щелкнули правильно, они могут перескочить слишком быстро, чтобы вы могли их различить.

Подумайте о том, что происходит в любом старом приложении, когда вы дважды щелкаете мышью (потому что я думаю, что это обстоятельство не является необычным). Поскольку я набираю это прямо сейчас, если я дважды щелкну в другом месте текста, слово будет выделено и выделено, и курсор исчезнет; возможно, он был расположен после первого щелчка, а затем обработан двойным щелчком, а затем аннулирован.

...