ГлавнаяActionScript 3 — «100 советов» › Предотвращение распространения события

Предотвращение распространения события

June 19th, 2006
Если нужно пресечь дальнейшее распространение события можно использовать методы stopPropagation() (flash.events.Event.stopPropagation()) или stopImmediatePropagation() (flash.events.Event.stopImmediatePropagation()).
stopPropagation – предотвращает дальнейшее распространение события в стадии захвата (capturing) или подъема (bubbling)
stopImmediatePropagation – блокирует вообще все, в том числе и фазу обработка (targeting).
Смотрим пример:

Код:
var circle:Sprite = new Sprite(); circle.graphics.beginFill(0x4080A0); circle.graphics.drawCircle(50, 50, 25); addChild(circle); circle.addEventListener(MouseEvent.CLICK, clickCircle1); circle.addEventListener(MouseEvent.CLICK, clickCircle2); stage.addEventListener(MouseEvent.CLICK, clickStage); function clickCircle1(evt:MouseEvent):void { // evt.stopPropagation(); // evt.stopImmediatePropagation(); trace("clickCircle1"); } function clickCircle2(evt:MouseEvent):void { trace("clickCircle2"); } function clickStage(evt:MouseEvent):void { trace("clickStage"); }

При клике мышкой по кругу (circle), без использования прерывания распространения события:

Код:
//output clickCircle1 clickCircle2 clickStage

Срабатывают два обработчика событий на клик мышки “clickCircle1″,”clickCircle2″ фаза обработка (targeting) и обработчик “clickStage” на фазе подъема (bubbling).

Если убрать комментарий с evt.stopPropagation();

Код:
//output с использованием stopPropagation clickCircle1 clickCircle2

В обработчике “clickCircle1″ вызывается stopPropagation, которое предотвращает дальнейшее распространение события по фазам захвата (capturing) и подъема (bubbling), поэтому далее нормально вызывается обработчик “clickCircle2″ в фазе обработка (targeting), но не вызывается “clickStage”, поскольку он уже на фазе подъема (bubbling).

Если убрать комментарий с evt.stopImmediatePropagation();

Код:
// output с использованием stopImmediatePropagation clickCircle1

В этом случае не будет вызван даже обработчик “clickCircle2″ в фазе обработка (targeting).

Категория: ActionScript 3 — «100 советов» Ярлыки: ,

Смотрите также

Определение фазы события Глобальные события
  1. Пока без комментариев.
  1. Пока нету.