http://blog.csdn.net/liminxin272/article/details/6659925

在flash中只要发生事件,Flash Player 就会调度事件对象。如果事件目标不在显示列表中,则 Flash Player 将事件对象直接调度到事件目标。例如,Flash Player 将 progress 事件对象直接调度到 URLStream 对象。但是,如果事件目标在显示列表中,则 Flash Player 将事件对象调度到显示列表,事件对象将在显示列表中穿行,直到到达事件目标。

"事件流"说明事件对象如何在显示列表中穿行。显示列表以一种可以描述为树的层次结构形式进行组织。位于显示列表层次结构顶部的是舞台,它是一种特殊的显示对象容器,用作显示列表的根。舞台由flash.display.Stage类表示,且只能通过显示对象访问。每个显示对象都有一个名为stage的属性,该属性表示应用程序的舞台。

当Flash Player调度事件对象时,该事件对象进行一次从舞台到"目标节点"的往返行程。DOM事件规范将目标节点定义为代表事件目标的节点。也就是说,目标节点是发生了事件的显示列表对象。例如,如果用户单击名为child1的显示列表对象,Flash Player将使用child1作为目标节点来调度事件对象。

从概念上来说,事件流分为三部分。第一部分称为捕获阶段,该阶段包括从舞台到目标节点的父节点范围内的所有节点。第二部分称为目标阶段,该阶段仅包括目标节点。第三部分称为冒泡阶段。冒泡阶段包括从目标节点的父节点返回到舞台的行程中遇到的节点。

如果您将显示列表想像为一个垂直的层次结构,其中舞台位于顶层(如下图显示),那么这些阶段的名称就更容易理解了:

如果用户单击Child1,Flash Player将向事件流调度一个事件对象。如下面的图像所示,对象的行程从Stage开始,向下移动到Parent,然后移动到 Child1,再"冒泡"返回到Stage:在行程中重新经过Parent,再返回到Stage

在该示例中,捕获阶段在首次向下行程中包括 StageParent。目标阶段包括在 Child1 花费的时间。冒泡阶段包括在向上返回到根节点的行程中遇到的 ParentStage

事件流使现在的事件处理系统比 ActionScript 程序员以前使用的事件处理系统功能更为强大。早期版本的 ActionScript 中没有事件流,这意味着事件侦听器只能添加到生成事件的对象。在 ActionScript 3.0 中,您不但可以将事件侦听器添加到目标节点,还可以将它们添加到事件流中的任何节点。

当用户界面组件包含多个对象时,沿事件流添加事件侦听器的功能十分有用。例如,按钮对象通常包含一个用作按钮标签的文本对象。如果无法将侦听器添加 到事件流,您将必须将侦听器添加到按钮对象和文本对象,以确保您收到有关在按钮上任何位置发生的单击事件的通知。而事件流的存在则使您可以将一个事件侦听器放在按钮对象上,以处理文本对象上发生的单击事件或按钮对象上未被文本对象遮住的区域上发生的单击事件。

不过,并非每个事件对象都参与事件流的所有三个阶段。某些类型的事件(例如 enterFrameinit 类型的事件)会直接调度到目标节点,并不参与捕获阶段和冒泡阶段。其它事件可能以不在显示列表中的对象为目标,例如调度到 Socket 类的实例的事件。这些事件对象也将直接流至目标对象,而不参与捕获和冒泡阶段。

事件实例

Main类:

package{import flash.display.Sprite;import flash.events.Event;import flash.events.MouseEvent;import flash.geom.Rectangle;import RectContainer;public class Main extends Sprite{public function Main(){var outter:Sprite = new RectContainer(10, 10, 200, 200);var middle:Sprite = new RectContainer(30, 30, 150, 150);var inner:Sprite = new RectContainer(50, 50, 100, 100);outter.name = "外部容器";middle.name = "中间容器";inner.name = "内层容器";addChild(outter);outter.addChild(middle);middle.addChild(inner);inner.addEventListener(MouseEvent.CLICK, clickHandler);middle.addEventListener(MouseEvent.CLICK, clickHandler);outter.addEventListener(MouseEvent.CLICK, clickHandler);}private function clickHandler(evt:MouseEvent):void{trace("事件发生目标:\t" + evt.target.name);trace("正在侦听事件的当前目标\t" + evt.currentTarget.name);trace("事件当前阶段\t"  + evt.eventPhase);trace("==========================================");}}
}

RectContainer类:

package{import flash.display.Sprite;public class RectContainer extends Sprite{public function RectContainer(x:Number,y:Number,w:Number,h:Number){this.graphics.beginFill(0xFFFFFF * Math.random());this.graphics.drawRect(x, y, w, h);this.graphics.endFill();}}
}

F  点击内部矩形触发事件如下:

事件发生目标:     内层容器

正在侦听事件的当前目标 内层容器

事件当前阶段  2

==========================================

事件发生目标:     内层容器

正在侦听事件的当前目标 中间容器

事件当前阶段  3

==========================================

事件发生目标:     内层容器

正在侦听事件的当前目标 外部容器

事件当前阶段  3

==========================================

F  点击中部矩形触发事件如下:

事件发生目标:     中间容器

正在侦听事件的当前目标 中间容器

事件当前阶段  2

==========================================

事件发生目标:     中间容器

正在侦听事件的当前目标 外部容器

事件当前阶段  3

==========================================

F  点击外部矩形触发事件如下:

事件发生目标:     外部容器

正在侦听事件的当前目标 外部容器

事件当前阶段  2

==========================================

AS3的事件模型 .相关推荐

  1. 深度探索as3的事件机制

    as3的事件机制很好用了.但要用好,用对,就得详细了解它的事件模型.本文将深度探索as3事件的各个方面. 1.事件模型 as3的事件系统包括 dispatchers(派发器),listeners(监听 ...

  2. memcached(二)事件模型源码分析

    在memcachedd中,作者为了专注于缓存的设计,使用了libevent来开发事件模型.memcachedd的时间模型同nginx的类似,拥有一个主进行(master)以及多个工作者线程(woker ...

  3. 回调函数与Delphi的事件模型

    回调函数: 回调函数是这样一种机制:调用者在初始化一个对象(这里的对象是泛指,包括OOP中的对象.全局函数等)时,将一些参数传递给对象,同时将一个调用者可以访问的函数地址传递给该对象.这个函数就是调用 ...

  4. 事件模型、事件流(冒泡与捕获)、事件代理

    本文原链接:https://www.cnblogs.com/hngdlxy143/p/9068282.html https://www.jb51.net/article/139997.htm 事件模型 ...

  5. .NET 事件模型教程(一)

    .NET 事件模型教程(一) .code { padding: 10px 10px 10px 10px; font-family: 宋体; background-color: #ececec } 目录 ...

  6. Delphi编写事件模型客户端(2)

    上次写了事件模型类的定义,今天我来写一写如何实现这个类. 首先的两个函数我想稍微了解网络编程的人都会清楚.<?xml:namespace prefix = o ns = "urn:sc ...

  7. 行为模型实例 php,JS中事件模型的实例详解

    之前对事件模型还是比较清楚的,许多概念都清晰映射在脑海中.工作之后,一方面使用的 局限性,二是习惯于用框架中的各种事件监听方式,简单即方便,久而久之,事件的一些概念开 始淡出记忆中,就像我现在已经开始 ...

  8. ActionScript 3.0 Step By Step系列(六):学对象事件模型,从点击按扭开始

    事件可以理解为所发生的.ActionScript 能够识别并可响应的事情.许多事件与用户交互有关 . 例如:用户单击按钮,或按键盘上的键 ― 但也有其它类型的事件.例如,如果使用 ActionScri ...

  9. JavaScript 复习之 事件模型 和 Event对象

    事件模型 一.监听函数 js 有三种方法,可以为事件绑定监听函数 HTML 的 on- 属性 元素节点的事件属性,也可以指定监听函数 EventTarget.addEventListener() DO ...

最新文章

  1. jvm十一:类加载器双亲委托机制
  2. wpf中把按钮变成圆角
  3. 超简单调整Fedora25遇到的字体小问题——字体渲染问题和输入框内容显示不全...
  4. PHP面向对象的魔术方法
  5. nano java_java – System.nanoTime()完全无用?
  6. Android知识点汇总以及常见面试题
  7. 疯狂java讲义pdf百度云,附大厂真题面经
  8. 关于安卓打包脚本aab
  9. 炉石传说服务器维护公告,炉石传说3月15日更新维护公告 炉石更新日志
  10. ubuntu QT Creator Fatal IO error 2 (没有那个文件或目录) on X server :0
  11. ipv4地址的编码长度为_IPv4 中IP地址的长度为 ( ) 位,IPv6中IP地址的长度位 ( ) 位。_建筑施工技术答案_学小易找答案...
  12. 一些著名软件的开发语言概述
  13. EC20模块内置协议栈的开发笔记
  14. 计算机毕业设计SSMjava高校社团管理系统【附源码数据库】
  15. ARM架构SMMU驱动详解
  16. VMWare:vSphere6 企业版参考序列号
  17. 【java】Eclipse错误: 找不到或无法加载主类或项目无法编译10种解决大法!
  18. Element 单元格合计(多行合计、合计列合并)
  19. kube-scheduler
  20. 如何解决我的电脑中文件搜索速度很慢的问题?

热门文章

  1. 力扣——盛最多水的容器
  2. 力扣——罗马数字转整数
  3. 验1-8 输出倒三角图案 (5 分)
  4. python之计算空间向量夹角
  5. python 双冒号切片_Numpy 学习笔记
  6. pyaudio usb playback_电脑USB接口怎么禁用?系统禁用USB端口的两种方法
  7. 整理Java基础知识--Date Time2
  8. VC6.0不支持标准库函数max和min
  9. cisco路由器基本实验之六 CHAP and RIP (Boson NetSim)
  10. SSM项目-山东医院-可行性配置-1