Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Отменить обработку click после mouse_up если был drag (http://www.flasher.ru/forum/showthread.php?t=207801)

Korchy 09.05.2014 00:42

Отменить обработку click после mouse_up если был drag
 
Как отменить (не обрабатывать) событие mouse.click если в обработке mouse_down - mouse_up было перетаскивание (drag/drop) объекта? Т.к. click отрабатывается после mouse_up простым флагом не обойтись. Приходит в голову только решение "в лоб" - в mouse_down сохранять координаты и в click смотреть, не изменились ли они. Но может есть решение лучше?

bav 09.05.2014 03:28

Можно так:
0) Создаем флаг was_moving = false. Вешаем прослушку mouse_down, mouse_up, mouse_click.
1) В обработчике mouse_down устанавливаем was_moving = false. Вешаем прослушку mouse_move.
2) В обработчике mouse_move устанавливаем was_moving = true (потому что раз обработчик вызван, то движение точно произошло и, заметим, ответственность за отслеживанием наличия движения ложится на плеер). После установки флага, можно здесь же удалить обработчик mouse_move.
3) В обработчике mouse_click смотрим установлен ли флаг was_moving:
3.1) Установлен: значит движение было (и mouse_move уже самоудалился), выходим из функции.
3.2) Не установлен: значит движения не было (mouse_move все еще висит), удаляем mouse_move, выполняем остаток функции.

Преимущество схемы: оставляем плееру решать было движение или нет.
Недостатки схемы: довольно запутана, постоянно вешать/снимать слушатель mouse_move может оказаться накладным. А может и нет.


Часовой пояс GMT +4, время: 03:11.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.