![]() |
Отменить обработку click после mouse_up если был drag
Как отменить (не обрабатывать) событие mouse.click если в обработке mouse_down - mouse_up было перетаскивание (drag/drop) объекта? Т.к. click отрабатывается после mouse_up простым флагом не обойтись. Приходит в голову только решение "в лоб" - в mouse_down сохранять координаты и в click смотреть, не изменились ли они. Но может есть решение лучше?
|
Можно так:
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
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.