В 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); // обработка и подъем