<li id="2aw4k"></li>
  • <div id="2aw4k"><tr id="2aw4k"></tr></div>
  • <div id="2aw4k"><tr id="2aw4k"></tr></div>
    <center id="2aw4k"><small id="2aw4k"></small></center><center id="2aw4k"><small id="2aw4k"></small></center>
    首页»Flash»全面认识Flex事件机制

    全面认识Flex事件机制

    来源:Web开发者 发布时间:2012-03-05 阅读次数:

    Flex有很多值得学习的地方,本文就向大家简单介绍一下Flex事件机制,主要包括事件流,自定义事件等内容,相信通过本文的简单介绍你对Flex事件机制一定会有深刻的认识。

    Flex事件机制

    Flex事件机制是观察者模式,即首先要注册事件,事件分发后通过事件响应函数进?#20889;?#29702;。

    例如在AS3中:

    button.addEventListener(“click”,onClick);//向button注册一个click事件
    internalfunctiononClick(evt:MouseEvent):void{txt.text=“clickabutton!”;}
    //事件响应函数 

    那么注册事件注册什么呢?通过addEventListener注册函数的参数可以看出,首先需要注册事件类型(第一个参数),然后注册响应函数,即事件发生后需要做什么事情,也就是说调用哪一个方法。

    ◆那么响应函数需要什么要求呢?

    响应函数必须要一个参数,指明注册的事件的事件类型,如上面的例子,我们注册的是一个鼠标事件类型,即鼠标单击事件。注册的事件类型必须和响应函数的事件类型一致!

    ◆到?#23376;?#21738;些事件类型呢?

    除了有系统默认的事件类型外,我们可以定义自己的事件和事件类型。简单的说,事件类型就是定义在事件类的常量属性。

    Flex事件机制中的事件流

    1.捕获阶段(从根节点到子节点,检测对象是否注册了监听器,是则调用监听函数) 2.目标阶段(调用目标对象本身注册的监听程序) 3.冒泡阶段(?#24189;?#26631;节点到根节点,检测对象是否注册了监听器,是则调用监听函数)注:事件发生后,每个节点可以有2个机会(2选1)响应事件,默认关闭捕获阶段。从上到下(从根到目标)是捕获阶段,到达了目标后是目标阶段,然后?#24189;?#26631;向上返回是冒泡阶段。

    怎样理解事件流?

    当事件发生时,FLEX通过事件的分发器EventDispatcher进行事件分发,分发的顺序是:从上往下到达目标,然后从下往上,?#24189;?#26631;开始返回。如上面1、2、3所说的那样,这里就会有一个问题,在事件的流经过程中,不是目标的对象如果注册了事件,也有了相应的事件响应函数,那么不是目标的对象响应了事件的处理,这怎么办呢?由于上面说的那样,addEventListener在只有如上两个参数的牧人情况下是关闭捕获阶段?#27169;?#20063;就是说事件流是?#24189;?#26631;阶段开始?#27169;?#28982;后是冒泡阶段,当出现容器包含控件的时候,可以使用判断 if(evt.target==evt.currentTarget) 来确定当前事件流上的当前流经对象是否就是目标对象,如果是就进行相应的处理。

    移除对象的事件流:removeEventListener(),参数与注册事件相同。阻断事件流中目标对象的后继事件,即通过了目标阶段后阻止冒泡阶段: event类的方法:publicfunctionstopImmediatePropagation():void

    Flex事件机制中的Event类

    Event类作为创建Event对象的基类,当发生事件时,Event对象将作为参数传递给事件侦听器。如MouseEvent、KeyboardEvent,更多的可以查参考手册。

    Event类有几个常用的公共属性:

    是否冒泡:bubbles; 目标对象:target; 所处阶段:eventPhase; 当前对象:currentTarget; 从参考手册可以event类的构造函数:

    Event()构造函数publicfunctionEvent(type:String,bubbles:Boolean=false,cancelable:Boolean=false) 创建一个作为参数传递给事件侦听器的Event对象。参数type:String—事件的类型,可以作为Event.type访问。 bubbles:Boolean(default=false)—确定Event对象是否参与事件流的冒泡阶段。默认值为false。 cancelable:Boolean(default=false)—确定是否可以取消Event对象。默认值为false。在flash.events包中可以看见系统?#28304;?#30340;事件。

    Flex事件机制中如何自定义事件

    自定义事件,也就是向监听器传递自己定义的事件类型,同时可以通过事件传递参数。

    1.创建自定义事件名称的Event

    dispatchEvent(newEvent(“myEvnet”,true,false)); 

    2.创建自定义事件类

    PublicclassMyEventextendsEvent{
       ....    
    } 

    dispatchEvent是EventDispatcher的方法:publicfunctiondispatchEvent(event:Event):Boolean将事件调度到事件流中。事件目标?#23884;云?#35843;用dispatchEvent()方法的EventDispatcher对象。这句话就是说是哪个对象调用dispatchEvent(),那么该事件就会被分发到那个对象的事件流中,如果没有指明对象,那么默认为this对象,即应用程序。这时该事件被分发到应用程序对象的事件流中,而没有分发?#25945;?#23450;对象的事件流中。一旦两个对象的不是父子关系(控件树),那么事件流不会在这两个对象之间有联系,那么事件不会被响应;如果是,则还是要响应。(这种情况dispatchEvent的参数Event对象的参数必须是三个,如上)。dispatchEvent就是?#24471;?#26377;了新的事件,只要注册了该事件,就可以响应。

    来源:xinem csdn.net

    QQ群:WEB开发者官方群(515171538),验证消息:10000
    微信群:?#26377;?#32534;微信 849023636 邀请您加入,验证消息:10000
    提示:更多精彩内容关注微信公众号:全栈开发者?#34892;模╢sder-com)
    网友评论(共1条评论) 正在载入评论......
    理智评论文明上网,拒绝恶意谩骂 发表评论 / 共1条评论
    登录会员?#34892;?/span>
    大乐透彩票预测
    <li id="2aw4k"></li>
  • <div id="2aw4k"><tr id="2aw4k"></tr></div>
  • <div id="2aw4k"><tr id="2aw4k"></tr></div>
    <center id="2aw4k"><small id="2aw4k"></small></center><center id="2aw4k"><small id="2aw4k"></small></center>
    <li id="2aw4k"></li>
  • <div id="2aw4k"><tr id="2aw4k"></tr></div>
  • <div id="2aw4k"><tr id="2aw4k"></tr></div>
    <center id="2aw4k"><small id="2aw4k"></small></center><center id="2aw4k"><small id="2aw4k"></small></center>
    36选7开奖结果 大乐透走势图带连线图 2018年一句玄机料 481泳坛夺金视频 云南时时彩历史开奖号码查询 江西快3走势图200期 香港六合彩总部 澳洲幸运10精准计划 湖北福彩快三开奖结果走势图 11选5前三组选有几注 一肖中特公式规律 云南快乐十分 七十六六肖中特 双色球大奖排行 福建快三走势图彩经网