Root
-A
-B
-C
-D
[color=blue][b]D->触发事件
捕获阶段: Root->A->B->C
捕获阶段: D
冒泡阶段: C->B->A->Root[/b][/color]
单击圆D, 显示:[b]d触发了click事件[/b]
这次我们让D分发事件,并打开冒泡阶段
显示:
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
设置捕获阶段:
d触发了click事件
root... currentTarget: root1 target: d
a... currentTarget: a target: d
b... currentTarget: b target: d
c... currentTarget: c target: d
-A
-B
-C
-D
[color=blue][b]D->触发事件
捕获阶段: Root->A->B->C
捕获阶段: D
冒泡阶段: C->B->A->Root[/b][/color]
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, 显示:[b]d触发了click事件[/b]
这次我们让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