Показать сообщение отдельно
Старый 27.10.2006, 13:21
MerlinTwi вне форума Посмотреть профиль Отправить личное сообщение для MerlinTwi Посетить домашнюю страницу MerlinTwi Найти все сообщения от MerlinTwi
  № 72  
Ответить с цитированием
MerlinTwi
 
Аватар для MerlinTwi

Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
По умолчанию 78. Фазы событий

В ActionScript 3 для отображаемых объектов добавлены три фазы распространения событий:
  • Захват, capturing
  • Обработка, targeting
  • Подъем, bubbling

1. захват (capturing)
Событие начинается со stage и спускается вниз, вызывая обработчики связанные с этим событием у всех объектов (если же обработчика не существует, ничего не происходит).
Код:
       event
+---------|----+
| parent  |    |
|  +------V-+  |
|  |child   |  |
|  |        |  |
|  +--------+  |
+--------------+
2. обработка (targeting)
На стадии обработки вызывается обработчик события объекта которому собственно оно и предназначалось.
Код:
+--------------+
| parent       |
|  +------ -+  |
|  |child   |  |
|  |event X |  |
|  +--------+  |
+--------------+
3. подъем (bubbling)
Перебираются все объекты, начиная с "виновника" события и до stage.
Код:
+---------^----+
| parent  |    |
|  +------|-+  |
|  |child | |  |
|  | event| |  |
|  +--------+  |
+--------------+
По умолчанию addEventListener подписывает обработчик события только на две фазы 2 (обработка) и 3 (подъем). Это позволяет вашему обработчику события реагировать на событие у себя а так же на это событие и у детей.
Если вы хотите реагировать на стадию захвата (1), необходимо в addEventListener указать третьим параметром true.
Код:
target.addEventListener("event", listener, true);
При этом обработчик события будет реагировать только на стадию захвата. Если вы хотите подписать обработчик события на все стадии нужно вызвать addEventListener дважды:
Код:
target.addEventListener("event", listener, true); // захват 
target.addEventListener("event", listener, false); // обработка и подъем
__________________
Создатель: Бойцовский клуб | TimeZero | Sky2Fly
Я возьму сам.