![]() |
|
|
|||||
Регистрация: Apr 2010
Сообщений: 67
|
![]() Здравствуйте!
У меня следующая проблема: Есть список объектов (пусть будут "юзеры"). Для этого списка есть функция удаления юзеров путем перетаскивания на кнопку. Для перетаскивания висит событие MOUSE_MOVE. Проблема в том, что слушатель ловит данные последнего юзера в списке (так как неизбежно протаскивается над ним) и его же удаляет. Т.е. тащишь на удаление первого юзера в списке, а удаляется последний. Проблема решается сменой MOUSE_MOVE на MOUSE_DOWN, Но! У меня на том же объекте висит событие CLICK которое не срабатывает если есть листнер по MOUSE_DOWN, какой-то конфликт возникает непонятный. Хотелось бы спросить как решить проблему одим из путей: 1) вместо CLICK повесить другой листнер (какой?) 2) Что то сделать с MOUSE_MOVE P.s. пробовал ставить stopImmediatePropagation(), но эффекта нет (или я что-то не так делал) |
|
|||||
1) MouseDown - запоминаете на ком - пихаете в _temp, например.
2) MouseMove - если с зажатой кнопкой и таргет совпадает с _temp (или _temp!=null), то пихаете все что нужно в DragSource и работаете с DragManager; 3) _temp = null; 4) Кнопка, на которую тянете, ловит DragEnter, DragDrop и работает с DragSource этих событий.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку. |
|
|||||
Регистрация: Apr 2010
Сообщений: 67
|
Вы мне показали как различить наведение мыши и перетаскивание. А у меня нужно различить события клика и перетаскивания.
|
|
|||||
Я вам предложил использовать ДрагМенеджер, так как у меня создается ощущение, что вы делаете за него работу.
Клик = Даун + Ап на одном объекте, поэтому клика нет. Запоминайте кого тянете к помойке в локальную переменную, только если она = нулл. Тогда последний элемент будет в обломе.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку. |
|
|||||
Регистрация: Apr 2010
Сообщений: 67
|
GBee, спасибо за совет, заработало. Сделал так:
private var tempObj:Object; ...... target.addEventListener(MouseEvent.MOUSE_DOWN, clickFunc); ...... public function clickFunc(e:MouseEvent):void { if (e.buttonDown == true){ tempObj = e.currentTarget } e.currentTarget.addEventListener(MouseEvent.MOUSE_MOVE, dragIt); e.currentTarget.addEventListener(MouseEvent.MOUSE_UP, clickUp); } private function dragIt(e:MouseEvent):void { if (e.buttonDown == true && tempObj != null){ //манипуляции с DragManager } tempObj=null; e.currentTarget.removeEventListener(MouseEvent.MOUSE_MOVE, dragIt); e.currentTarget.removeEventListener(MouseEvent.MOUSE_UP, clickUp) } private function clickUp(e:MouseEvent):void { //функция для клика e.currentTarget.removeEventListener(MouseEvent.MOUSE_MOVE, dragIt); e.currentTarget.removeEventListener(MouseEvent.MOUSE_UP, clickUp) } Последний раз редактировалось Ivanaka; 30.07.2010 в 00:54. Причина: исправление замечаний |
|
|||||
На здоровье :о))
Тока еще два замечания - совета: 1) Вы подписываетесь на два события, а потом отписываетесь от одного. Если человек, просто кликнет , останется подпись на драгИт и тп 2) (MouseEvent.MOUSE_UP, clickUp); для системменеджера добавьте, подписку и отписку. Чтобы когда утянули что то за флэшку и бросили там не было глюков
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку. |
|
|||||
Регистрация: Apr 2010
Сообщений: 67
|
Цитата:
![]() Я так понимаю в clickFunc добавить и отписаться вместе с остальными? |
![]() |
![]() |
Часовой пояс GMT +4, время: 12:44. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|