as事件流

Root
-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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值