![]() |
|
||||||||||
|
|||||
|
Есть некоторый контейнер, в котором находятся другие объекты, в которых в свою очередь могут находиться другие объекты. На контейнере есть мышиное событие mouseDown.
Задача: если мы кликаем по объекту, который не содержит других вложенных объектов в месте клика, то событие у нас вызывается один раз, а если мы к примеру попадаем по объекту, который находится в одном из объектов, который расположен в контейнере (м-дя, завернул...), то необходимо получить 2 событие с e.target в одном случае в виде самого объекта, а в другом - в виде того объекта, который находится в последнем. Знаю, что дело в фазах события, но что-то не получается сообразить как это реализовать. Заранее спасибо. ЗЫ. можно было бы через parent, но хотелось бы с соблюдением ООП-шности...
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
|
|||||
|
Регистрация: Aug 2008
Адрес: Рязань
Сообщений: 723
|
Чтобы прослушивать событие во всех трех фазах, необходимо вызвать addEventListener дважды: один раз с useCapture в значении true, а другой — с useCapture в значении false.
__________________
low + |
|
|||||
|
У меня такая примерно иерархия: container(на нем слушатели)-объект(контейнер для вложенных объектов)-объекты последнего уровня(теоретически могут быть контейнерами, но на данный момент - нет)
addEventListener(MouseEvent.MOUSE_DOWN, onDown, false, 0, true); addEventListener(MouseEvent.MOUSE_DOWN, onDown, false, 1, true); addEventListener(MouseEvent.MOUSE_DOWN, onDown, false, 2, true); addEventListener(MouseEvent.MOUSE_DOWN, onDown, true, 0, true); addEventListener(MouseEvent.MOUSE_DOWN, onDown, true, 1, true); addEventListener(MouseEvent.MOUSE_DOWN, onDown, true, 2, true); ).При этом отслеживаю e.target и e.currentTarget. В трйсе выводится container и объект последнего уровня, но не тот, который находится между ними. Что я делаю не правильно, как мне в событиии до него достучаться, имея события только на контейнере? Вешать непосредственно на этот объект не хочу, т.к. подобных может быть бесконечно большое количество.
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! Последний раз редактировалось TanaTiX; 10.07.2010 в 16:35. |
|
|||||
|
Регистрация: Jun 2010
Адрес: Москва
Сообщений: 8
|
Не понял, для чего вы подписываетесь по 3 раза с разным приоритетом? Событие все равно придет один раз для данной фазы.
event.currentTarget - тот кого слушаем, то есть всегда ваш container. event.target - тот кто инициировал событие в цепочке списка отображения. Итого, если в container лежит еще container2, а в нем object, то при клике на object - в событии получим event.target == object. Тут все нормально и ошибки тут нет. То что вы описали сделать не получится, да и непонятно зачем? Если пришло событие от ребенка, всегда можно узнать есть ли у него родитель и является ли он родителем верхнего уровня. |
|
|||||
|
Регистрация: Feb 2009
Адрес: Ялта, Севастополь, Одесса
Сообщений: 52
|
всем объектам поприсваивайте name для идентификации и затем
private function onDown(event:MouseEvent = null):void{ trace('target:' +event.target.name+ ', currentTarget:'+event.currentTarget.name+ ', eventPhase:' +event.eventPhase); } там на самом деле все очень просто
__________________
понимание основ освобождает от необходимости запоминания тысяч фактов Последний раз редактировалось Elser; 15.07.2010 в 04:22. |
|
|||||
|
Протупил - перепутал параметр.
Спасбо, за отзывы, задача решена другим способом. Судя по всему изначально был выбран неправильный подход к формированию структуры.
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:50. |
|
|
« Предыдущая тема | Следующая тема » |
|
|