as事件流

阅读更多
Root
  -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

你可能感兴趣的:(Flash)