`

Flex事件冒泡机制

    博客分类:
  • flex
 
阅读更多

在网上浏览了几篇文章,大体总结了一下,简单说明如下:

事件的传递分为三个阶段,如图:捕获阶段(Capture Phase)、目标阶段、冒泡阶段,比如当你点击了一下Child1 Node时,事件会从Stage->Parent Node->Child1 Node一路传过来(捕获阶段),传到Child1 Node时,执行Child1 Node的相应事件函数(目标阶段),然后传回Stage(冒泡阶段)。

 

1、  创建一个Flex Project,名称为:Demo;

2、  切换到Design模式下,添加一个Panel和一个Button,其效果如下:

2010年5月2日 - TEANA - JAVA KEY

3、  切换到Source模式下,为程序添加事件,其代码如下:

<?xml version="1.0" encoding="utf-8"?>

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"

               xmlns:s="library://ns.adobe.com/flex/spark"

               xmlns:mx="library://ns.adobe.com/flex/mx">

    <fx:Script>

        <![CDATA[

            import mx.controls.Alert;

            private function showDif(event:MouseEvent):void

            {

                Alert.show("目标ID = " + event.target.id +

                "\n 当前目标ID = " + event.currentTarget.id);

            }

        ]]>

    </fx:Script>

    <s:Panel x="104" y="113" width="250" height="200"

             title="target和currentTarget" fontSize="14"

             fontFamily="Times New Roman" color="#F30909"

             id="panel_object">

        <s:Button x="89" y="54" label=" 测 试 "  id="button_object"

                  click="showDif(event)"/><!—事件由Button控制-->

    </s:Panel>

</s:Application>

单击测试按钮,效果如下:

2010年5月2日 - TEANA - JAVA KEY

4、  修改源程序,事件由Panel触发,代码如下:

<?xml version="1.0" encoding="utf-8"?>

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"

               xmlns:s="library://ns.adobe.com/flex/spark"

               xmlns:mx="library://ns.adobe.com/flex/mx">

    <fx:Script>

        <![CDATA[

            import mx.controls.Alert;

            private function showDif(event:MouseEvent):void

            {

                Alert.show("目标ID = " + event.target.id +

                "\n 当前目标ID = " + event.currentTarget.id);

            }

        ]]>

    </fx:Script>

    <s:Panel x="104" y="113" width="250" height="200"

             title="target和currentTarget" fontSize="14"

             fontFamily="Times New Roman" color="#F30909"

             id="panel_object"  click="showDif(event)"><!—事件由Panel触发-->

        <s:Button x="89" y="54" label=" 测 试 "  id="button_object" />

    </s:Panel>

</s:Application>

运行程序后,点击测试按钮以及点击Panel面板,效果如下:

2010年5月2日 - TEANA - JAVA KEY      2010年5月2日 - TEANA - JAVA KEY

记住:

①     target对象总是抛出事件的对象,currentTarget对象是处理事件的对象,很多情况下他们是相同的,但不总是这样。

②     所有Event对象都有target 和currentTarget属性,target 属性可引用事件分派对象,currentTarget属性可引用正在被检测事件监听器的当前节点。

③     在事件将在控件链中向上冒泡,在此过程中target 始终不变,currentTarget在每个向上移动的过程中及时改变。

④     例如当用户点击一个Button控件,很可能事件派发者是Button的内部子组件UITextField,事件向上冒泡过程中target 始终为 UITextField不变,但currentTarget会逐步冒泡到Button组件,这时,触发了在Button上监听的Click事件处理函数。

⑤     开发人员一般使用event.currentTarget属性,event.target 属性很少使用。

 

 

事件流机制分为三个阶段:捕获、目标、冒泡。
addEventListener默认关闭了捕获阶段,打开冒泡阶段。并且捕获和冒泡阶段貌似是不能共存的。

一、没有捕获阶段(默认执行)具体是怎么执行的呢?
比如说有abc三个容器。同时对abc三个容器进行单击监听。
a.addEventListener(MouseEvent.CLICK,clickHandle);
b. addEventListener(MouseEvent.CLICK,clickHandle);
c. addEventListener(MouseEvent.CLICK,clickHandle);
我单击了c容器。
1、首先执行的是目标阶段。也就是我鼠标单击事件的目标是c容器,执行c容器的clickHandle函数。目标阶段完成。
2、冒泡阶段:将单击的事件冒泡上去,b获得了单击事件,执行clickHandle函数。然后就是c获得单击事件,执行clickHandle函数。

二、打开捕获
打开捕获阶段是怎么样的呢?
我单机了c容器。
1、捕获开始。a捕获到了单击事件执行函数。然后是b捕获到了单击事件执行函数。捕获阶段结束。
2、目标阶段开始。事件流终于流到了目标c,执行c的clickHandle函数。

========----- 以下内容于 2010-02-27 02:06:13 追加 -----========

总结:
1、捕获关闭后,顺序cba,由目标冒泡到父容器,一层一层上去。捕获打开后,顺序abc,由父容器一层一层下去直到目标事件。
2、事件evt:MouseEvent中evt的重要属性有:evt.target(事件目标,指c)、evt.currentTarget(当前事件所处的目标,指冒泡或者捕获阶段当前目标)。

分享到:
评论

相关推荐

    Flex的事件机制笔记

    Flex事件机制还提供了事件冒泡阻止(stopPropagation)和事件默认行为阻止(preventDefault)的功能。stopPropagation可以阻止事件继续在组件树中冒泡,而preventDefault则可以阻止事件的默认行为,如链接的跳转或...

    Flex 事件机制,flex入门学习

    【Flex 事件机制详解】 Flex 事件机制是 Flex 应用程序中不可或缺的一部分,它使得组件之间能够有效地通信,响应用户交互以及管理应用程序状态。在深入理解 Flex 事件机制之前,我们需要先了解一下基本概念。 1. *...

    Flex4.5事件机制

    Flex4.5事件机制是Flex应用程序开发中的核心组成部分,它基于ActionScript 3.0的事件模型,并且遵循DOM3级事件规范。事件机制使得开发者能够轻松响应用户交互和系统事件,为Flex程序员提供了强大且直观的处理工具。 ...

    flex事件机制分析

    Flex事件机制是Adobe Flex应用程序中处理用户交互和组件通信的核心组成部分。它主要涉及事件流、事件处理程序以及事件对象的概念,这些在构建富互联网应用程序(RIA)时扮演着至关重要的角色。下面将对这些概念进行...

    Flex事件机制(通俗易懂)

    ### Flex事件机制详解 #### 一、引言 Flex是一个强大的框架,用于构建高性能的Web应用程序。对于初学者而言,理解和掌握Flex中的事件机制是非常重要的一步。本文将深入探讨Flex事件机制的基础概念、事件注册通道、...

    flex事件机制的分发

    在Flex中,事件机制的分发主要包括三个主要阶段:捕获阶段、目标阶段和冒泡阶段。下面将详细介绍这些阶段以及自定义事件的创建与分发。 1. **捕获阶段**: 在Flex事件流中,捕获阶段是从最外层的UIComponent祖先...

    关于flex事件的讲解

    综上所述,理解和熟练运用Flex事件机制对于开发高质量的Flex应用程序至关重要。通过有效地利用事件监听、派发和管理,可以创建出响应迅速、功能丰富的用户界面。学习并掌握这些知识点,将使你在Flex编程中游刃有余。

    深入浅出讲解flex中的事件机制

    ### 深入浅出讲解Flex中的事件机制 #### 一、引言 Flex是一种用于构建高度交互式、跨平台的Web应用程序的技术框架。它基于Adobe的Flash平台,并且使用ActionScript 3作为编程语言。Flex的核心优势在于其强大的用户...

    flex 事件流原理

    Flex 事件流是Flex应用程序中事件处理的核心机制,它使得组件之间能够有效地通信和响应用户交互。在深入探讨之前,我们需要理解几个基本概念。 1. **事件机制**:事件是Flex中的一种通信方式,当特定条件满足时,...

    关于flex事件的讲解.rar

    Flex事件机制是Adobe Flex框架中的核心组成部分,它允许开发者创建响应用户交互的动态应用程序。在Flex中,事件处理是通过事件监听器来实现的,这些监听器可以注册到UI组件或者应用程序本身,以便在特定事件发生时...

    flex控件事件

    Flex支持两种事件传播机制:冒泡和捕获。冒泡是从最具体的节点(通常是子组件)向上逐级传播到不那么具体的节点(父组件)。捕获则相反,从最不具体的节点开始向下传播。事件监听器可以在任意阶段注册,以决定何时...

    Flex事件解析以及Flex基础功能介绍

    2. **事件传播**:Flex事件遵循捕获、目标、冒泡三个阶段的传播模型。开发者可以通过`addEventListener`方法监听特定事件,而`eventPhase`属性则可以帮助确定事件处于哪个传播阶段。 3. **事件处理**:在事件处理...

    flex事件讲解

    阅读这份文档将有助于深入理解Flex事件机制,并在实际开发中更高效地利用它们。 总之,理解Flex的事件模型对于创建响应式和高效的RIA至关重要。熟练掌握事件处理可以让你的Flex应用程序更加互动,提升用户体验。...

    flex的事件详解

    通过以上分析,我们可以看到Flex的事件处理机制不仅强大且灵活,而且遵循标准,易于学习和使用。无论是在构建复杂的用户界面还是实现复杂的业务逻辑方面,事件都起着至关重要的作用。掌握Flex的事件机制,有助于...

    flex-event.zip_flex

    Flex事件机制还支持事件阻止和事件冒泡的阻止。通过调用event.stopPropagation(),可以防止事件继续冒泡到父级组件;而event.preventDefault()可以阻止事件的默认行为,但不会阻止事件的进一步处理。 总之,Flex...

    Flex TitleWindow父子页面的事件派发

    - **合理使用事件冒泡**:理解事件冒泡机制,合理利用它可以简化事件处理逻辑,避免重复的事件监听器注册。 总之,通过深入理解Flex的事件机制和熟练掌握事件派发技巧,开发者能够构建出响应迅速、交互丰富的应用...

    flexevent.rar_flex

    Flex事件机制是Adobe Flex应用程序开发中的关键组成部分,它允许组件之间进行通信,处理用户交互,以及实现复杂的逻辑。本文将深入探讨Flex事件的基础知识、事件模型、事件生命周期、事件监听器,以及如何自定义事件...

    全套 Flex 实例 源码 关于事件的处理(3)

    本资料包“全套 Flex 实例 源码 关于事件的处理(3)”主要关注事件冒泡机制及其管理,帮助开发者理解如何阻止事件冒泡,以及如何添加和跟踪冒泡过程。以下是关于这个主题的详细讲解。 事件冒泡是指在事件传播过程...

    flex 事件学习

    本文将围绕“Flex事件学习”这一主题展开,深入探讨Flex中的事件模型、事件处理机制以及相关实践案例。 首先,事件是Flex应用程序中不可或缺的一部分,它们允许组件之间进行通信和响应用户交互。在Flex中,事件模型...

Global site tag (gtag.js) - Google Analytics