事件冒泡机制的简单应用

事件冒泡机制的简单应用

    关于事件冒泡机制原理已经很多资料了,咱就不扯了。

中文的有:

黑羽那里的as3教程:http://www.kingda.org/

经典上的这个:http://bbs.blueidea.com/thread-2799214-1-1.html

可以看。

下面一个简单的例子:

类文件:EventTest.as

package {
      import flash.display.Sprite;
      import flash.events.MouseEvent;
      import flash.events.Event;
      public class EventTest extends Sprite {
           public function EventTest() {
                 this.graphics.beginFill(0x0000FF);
                 this.graphics.drawRect(0,0,100,100);
                 this.graphics.endFill();
                 this.addEventListener(MouseEvent.CLICK,clickfunction);
           }
           private function clickfunction(evt:MouseEvent):void {
                 //自定义事件,第二个参数为冒泡支持,你可以改为 false 试试
                 var _event : Event = new Event("clickbutton",true);
                 dispatchEvent(_event);
           }
      }
}


Fla 文件

帧代码: 

import flash.display.Sprite;
import EventTest;
var a1:Sprite=rect(10,10,200,200);
var a2:Sprite=rect(30,30,160,160);
var a3:EventTest=new EventTest();
a1.name="a1";
a2.name="a2";
a3.name="a3";
addChild(a1);
a1.addChild(a2);
a2.addChild(a3);
a3.x=50;
a3.y=50;

a1.addEventListener("clickbutton",clickHandler);

function clickHandler(evt:Event):void{
      trace("监听到事件="+evt.type+"  \n目标="+evt.target.name);
}

function rect(_x:uint,_y:uint,_w:uint,_h:uint):Sprite{
      var tmp:Sprite=new Sprite();
      tmp.graphics.beginFill(0xFFFFFF*Math.random());
      tmp.graphics.drawRect(_x,_y,_w,_h);
      tmp.graphics.endFill();
      return tmp;
}

试试看就知道效果了,关键在于
var _event : Event = new Event("clickbutton",true);
 

public 函数 Event(type:String, bubbles:Boolean = false, cancelable:Boolean = false)

bubbles:Boolean (default = false) — 确定 Event 对象是否参与事件流的冒泡阶段。 默认值为 false。

    指示事件是否为冒泡事件。 如果事件可以冒泡,则此值为 true;否则为 false。 

    发生事件时,该事件在事件流的三个阶段中移动:捕获阶段,该阶段从显示列表层次结构的顶部流动到目标节点之前的节点;目标阶段,该阶段只包括目标节点;冒泡阶段,该阶段从目标节点的后续节点沿显示列表层次结构向上往回流动。

    某些事件(例如 activate 和 unload 事件)没有冒泡阶段。 对于没有冒泡阶段的事件,bubbles 属性的值为 false。

    这样,对于多层子对象里的事件,我们直接对它们的父级容器添加侦听器就可以,而不必像as2时要一层层转发了。  

 




[本日志由 jackgun 于 2007-10-16 11:30 AM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: 事件冒泡 应用
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.