-A
-B
-C
-D
D->触发事件
捕获阶段: Root->A->B->C
捕获阶段: D
冒泡阶段: C->B->A->Root
package com.event { import flash.events.Event; import flash.events.MouseEvent; import flash.text.TextField; import flash.display.Sprite; public class EventFlow extends Sprite { public function EventFlow() { var a:Sprite = new Sprite(); var b:Sprite = new Sprite(); var c:Sprite = new Sprite(); var d:Sprite = new Sprite(); a.name = 'a'; b.name = 'b'; c.name = 'c'; d.name = 'd'; this.addChild(a); a.addChild(b); b.addChild(c); c.addChild(d); drawCircle(a, "A"); drawCircle(b, "B"); drawCircle(c, "C"); drawCircle(d, "D"); a.x = a.y = 60; b.x = b.y = 60; c.x = c.y = 60; d.x = d.y = 60; this.addEventListener(MouseEvent.CLICK, onClick); this.addEventListener('apq', onRoot); a.addEventListener('apq', onA); b.addEventListener('apq', onB); c.addEventListener('apq', onC); d.addEventListener('apq', onD); } private function onRoot(e : Event) : void { trace('root...', showTarget(e)); } private function onD(e : Event) : void { trace('D...', showTarget(e)); } private function onC(e : Event) : void { trace('c...', showTarget(e)); } private function onB(e : Event) : void { trace('b...', showTarget(e)); } private function onA(e : Event) : void { trace('a...', showTarget(e)); } private function onClick(e : MouseEvent) : void { var d : Sprite = (e.target as Sprite); trace(d.name + "触发了click事件"); //d.dispatchEvent(new Event('apq', true)); } private function drawCircle(a : Sprite, txt : String) : void { var t:TextField = new TextField(); t.text = txt; t.mouseEnabled = false; a.graphics.beginFill(0xffffff * Math.random()); a.graphics.drawCircle(0, 0, 40); a.graphics.endFill(); a.addChild(t); } private function showTarget(e : Event) : String { return ('currentTarget: ' + e.currentTarget.name + ' target: ' + e.target.name); } } }
单击圆D, 显示: d触发了click事件
这次我们让D分发事件,并打开冒泡阶段
private function onClick(e : MouseEvent) : void { var d : Sprite = (e.target as Sprite); trace(d.name + "触发了click事件"); d.dispatchEvent(new Event('apq', true)); }
显示:
d触发了click事件
D... currentTarget: d target: d
c... currentTarget: c target: d
b... currentTarget: b target: d
a... currentTarget: a target: d
root... currentTarget: root1 target: d
设置捕获阶段:
//捕获阶段 this.addEventListener(MouseEvent.CLICK, onClick, true); this.addEventListener('apq', onRoot, true); a.addEventListener('apq', onA, true); b.addEventListener('apq', onB, true); c.addEventListener('apq', onC, true); d.addEventListener('apq', onD, true);
d触发了click事件
root... currentTarget: root1 target: d
a... currentTarget: a target: d
b... currentTarget: b target: d
c... currentTarget: c target: d