![]() |
|
||||||||||
|
|||||
|
Регистрация: Jun 2010
Сообщений: 120
|
Цитата:
stage.addEventListener(MouseEvent.CLICK, handler, true) mc.addEventListener(MouseEvent.CLICK, handler, false); stage.addEventListener(MouseEvent.CLICK, handler, false) mc.addEventListener(MouseEvent.CLICK, handler, false); function handler(e:MouseEvent): { trace("eventPhase : " + e.eventPhase + ", currentTarget : " + e.currentTarget.name + ", target : " + e.target.name + ", type : " + e.type); } eventPhase : 2, currentTarget : null, target : null, type : click Кликаем по mc в output выводит: eventPhase : 2, currentTarget : mc, target : mc, type : click eventPhase : 3, currentTarget : null, target : mc, type : click Я думаю по этому поводу следующее. Кликая по stage получателем события яв-ся stage, т.к. у stage нет предков. Что верно отображается в output, где указана, что handler запустился на target фазе. Идем дальше. Обработчик события подписанный на stage продолжает свою работу и доходит до своих потомков, т.е. до mc в bubbles фазе. На этом обработчик стейджа заканчивает свою работу. Далее кликая по mc, выполняется обработчик mc. Он уведомляет о событии stage на capture, но handler не запускается. Далее на target фазе для mc выполняется обработчик mc. На bubbles фазе этот же handler mc делает уведомление своему предку stage о том, что mc обработал событие. На этом заканчивается работа. |
|
|||||
|
Цитата:
Цитата:
Цитата:
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
|
Регистрация: Jun 2010
Сообщений: 120
|
Цитата:
Если у обработчика stage useCapture = false, то сработают одновременно оба обработчика, вначале mc на target, затем stage на bubbles. Не так ли ? |
|
|||||
|
Не совсем.
package { import flash.display.Graphics; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.EventPhase; import flash.events.MouseEvent; [SWF(width="1024", height="768")] public class ABCTest extends Sprite { public function ABCTest() { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; var mc:Sprite = new Sprite(); draw(mc.graphics); addChild(mc); mc.addEventListener(MouseEvent.CLICK, mc_clickHandler); stage.addEventListener(MouseEvent.CLICK, stage_clickHandler, true); stage.addEventListener(MouseEvent.CLICK, stage_clickHandler); } private function mc_clickHandler(event:MouseEvent):void { trace("mc click"); } private function stage_clickHandler(event:MouseEvent):void { switch (event.eventPhase) { case EventPhase.AT_TARGET: trace("stage target phase"); break; case EventPhase.CAPTURING_PHASE: trace("stage capturing phase"); break; case EventPhase.BUBBLING_PHASE: trace("stage bubbling phase"); break; } } private function draw(g:Graphics):void { g.beginFill(0xFFFF00); g.drawRect(0,0,100,100); g.endFill(); } } } Цитата:
Цитата:
__________________
משיח לא בא משיח גם לא מטלפן |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:29. |
|
|
« Предыдущая тема | Следующая тема » |
|
|