Як зрозуміти, що подія виконалась саме на передплатнику?

Іноді нам потрібно знати чи подія виконалась на передплатнику чи прийшло внаслідок bubbling. Наприклад, нам потрібно відслідкувати натискання миші на stage, але нам потрібно знати напевно, що користувач натиснув саме на stage, а не на його child. Авжеж, ми можемо зробити

stage.mouseChildren = false;

але це частіше всього не підходить.

Можна зробити двома рівносильними способами.

В обробнику для stage виконаємо перевірку на рівність event.target з event.currentTarget:

  1. function stageClickHandler(event:MouseEvent):void
  2. {
    1. if(event.target != event.currentTarget)
      1. return;
    1. // Your code here
  3. }

Або перевіримо яка наразі фаза event flow. Якщо вона дорівнює 2 (target phase), тоді подія виконалась саме на stage. Інакше припиняємо виконання обробника:

  1. function stageClickHandler(event:MouseEvent):void
  2. {
    1. if(event.eventPhase != 2)
      1. return;
    1. // Your code here
  3. }

Докладніше про подійну модель в ActionScript 3.0 ви можете почитати у доповіді Кості Ковальова (російською).

Таґи: , ,

Залиште свій коментар