Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.07.2010, 17:40
Ivanaka вне форума Посмотреть профиль Отправить личное сообщение для Ivanaka Посетить домашнюю страницу Ivanaka Найти все сообщения от Ivanaka
  № 1  
Ответить с цитированием
Ivanaka
 
Аватар для Ivanaka

Регистрация: Apr 2010
Сообщений: 67
По умолчанию Некорректная отработка drag & drop

Здравствуйте!
У меня следующая проблема:
Есть список объектов (пусть будут "юзеры"). Для этого списка есть функция удаления юзеров путем перетаскивания на кнопку. Для перетаскивания висит событие MOUSE_MOVE. Проблема в том, что слушатель ловит данные последнего юзера в списке (так как неизбежно протаскивается над ним) и его же удаляет. Т.е. тащишь на удаление первого юзера в списке, а удаляется последний.
Проблема решается сменой MOUSE_MOVE на MOUSE_DOWN, Но! У меня на том же объекте висит событие CLICK которое не срабатывает если есть листнер по MOUSE_DOWN, какой-то конфликт возникает непонятный. Хотелось бы спросить как решить проблему одим из путей:
1) вместо CLICK повесить другой листнер (какой?)
2) Что то сделать с MOUSE_MOVE
P.s. пробовал ставить stopImmediatePropagation(), но эффекта нет (или я что-то не так делал)

Старый 29.07.2010, 02:45
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 2  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
1) MouseDown - запоминаете на ком - пихаете в _temp, например.
2) MouseMove - если с зажатой кнопкой и таргет совпадает с _temp (или _temp!=null), то пихаете все что нужно в DragSource и работаете с DragManager;
3) _temp = null;
4) Кнопка, на которую тянете, ловит DragEnter, DragDrop и работает с DragSource этих событий.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 29.07.2010, 16:11
Ivanaka вне форума Посмотреть профиль Отправить личное сообщение для Ivanaka Посетить домашнюю страницу Ivanaka Найти все сообщения от Ivanaka
  № 3  
Ответить с цитированием
Ivanaka
 
Аватар для Ivanaka

Регистрация: Apr 2010
Сообщений: 67
Вы мне показали как различить наведение мыши и перетаскивание. А у меня нужно различить события клика и перетаскивания.

Старый 29.07.2010, 17:57
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 4  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Я вам предложил использовать ДрагМенеджер, так как у меня создается ощущение, что вы делаете за него работу.

Клик = Даун + Ап на одном объекте, поэтому клика нет.

Запоминайте кого тянете к помойке в локальную переменную, только если она = нулл. Тогда последний элемент будет в обломе.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 29.07.2010, 23:20
Ivanaka вне форума Посмотреть профиль Отправить личное сообщение для Ivanaka Посетить домашнюю страницу Ivanaka Найти все сообщения от Ivanaka
  № 5  
Ответить с цитированием
Ivanaka
 
Аватар для Ivanaka

Регистрация: Apr 2010
Сообщений: 67
GBee, спасибо за совет, заработало. Сделал так:

Код AS3:
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. Причина: исправление замечаний
Старый 30.07.2010, 00:02
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 6  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
На здоровье :о))

Тока еще два замечания - совета:
1) Вы подписываетесь на два события, а потом отписываетесь от одного. Если человек, просто кликнет , останется подпись на драгИт и тп
2) (MouseEvent.MOUSE_UP, clickUp); для системменеджера добавьте, подписку и отписку. Чтобы когда утянули что то за флэшку и бросили там не было глюков
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 30.07.2010, 01:00
Ivanaka вне форума Посмотреть профиль Отправить личное сообщение для Ivanaka Посетить домашнюю страницу Ivanaka Найти все сообщения от Ivanaka
  № 7  
Ответить с цитированием
Ivanaka
 
Аватар для Ivanaka

Регистрация: Apr 2010
Сообщений: 67
Цитата:
Сообщение от GBee Посмотреть сообщение
На здоровье :о))

Тока еще два замечания - совета:
1) Вы подписываетесь на два события, а потом отписываетесь от одного. Если человек, просто кликнет , останется подпись на драгИт и тп
2) (MouseEvent.MOUSE_UP, clickUp); для системменеджера добавьте, подписку и отписку. Чтобы когда утянули что то за флэшку и бросили там не было глюков
Спасибо еще раз, про №1 тупанул А по поводу №2 можно поподробней?
Я так понимаю в clickFunc добавить
Код AS3:
systemManager.addEventListener(MouseEvent.MOUSE_UP, clickUp);
и отписаться вместе с остальными?

Старый 30.07.2010, 01:11
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 8  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Попробовать было бы быстрее ;о)
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Создать новую тему Ответ Часовой пояс GMT +4, время: 00:08.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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