`

AS3的事件模型 .

 
阅读更多

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作为目标节点来调度事件对象。

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

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

 

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

 

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

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

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

不过,并非每个事件对象都参与事件流的所有三个阶段。某些类型的事件(例如 enterFrame init 类型的事件)会直接调度到目标节点,并不参与捕获阶段和冒泡阶段。其它事件可能以不在显示列表中的对象为目标,例如调度到 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类图表.rar

    理解和使用AS3的事件监听器机制对响应这些事件至关重要。 7. **动画效果**:AS3提供了强大的动画功能,可以为图表添加平滑过渡和动态效果,提升用户体验。 8. **性能优化**:由于AS3图表可能涉及大量数据处理和...

    AS3中的事件处理.txt

    在ActionScript 3.0(简称AS3)中,事件处理是实现动态交互式应用程序的基础。本文将深入探讨AS3中的事件处理机制及其应用,并通过一个具体的示例来阐述如何在实际开发过程中运用这些概念。 ### 一、AS3中的事件...

    Flex.3速记表 AS3.Flex.AIR最新版(pdf)

    这个“Flex.3速记表 AS3.Flex.AIR最新版(pdf)”是一个针对Flex 3开发者的重要参考资料,它涵盖了ActionScript 3(AS3)、Flex框架以及Adobe Integrated Runtime(AIR)的基础知识,帮助开发者快速查找和记忆关键概念...

    falsh.Programming.Description.Pane.AS3.code.rar_as3

    在Flash编程领域,ActionScript 3(AS3)是一种强大的脚本语言,它为创建交互式、动画丰富的网络内容提供了支持。"falsh.Programming.Description.Pane.AS3.code.rar_as3" 这个压缩包文件显然包含了使用AS3编写...

    as3瀑布类.rar

    1. **时间轴控制**:ActionScript 3.0引入了强大的事件驱动模型,通过` ENTER_FRAME `事件可以实现每帧执行特定代码,从而控制瀑布中元素的移动。 2. **显示对象**:AS3.0中的`DisplayObject`类及其子类(如`Sprite...

    第五节 AS3事件.docx

    总之,AS3事件机制是通过`addEventListener`方法注册事件处理函数,使用预定义的事件常量来指定事件类型。理解并熟练运用事件处理是AS3开发的关键技能之一,它使得代码更加模块化,易于维护和扩展。在实际开发中,应...

    AS3.Design.Patterns.Jul.2007.eBook-BBL

    在AS3的事件驱动模型中,事件监听器和事件派发机制就是观察者模式的典型应用。 4. **装饰器模式**:动态地给一个对象添加一些额外的职责,可以用来扩展功能而不影响其他对象。在AS3中,可以通过组合多个装饰器来...

    as3 chm as3.chm 帮助文档

    2. **事件驱动编程**:AS3中的事件模型是其核心机制之一,允许响应用户交互或其他程序事件。事件监听器注册(addEventListener)和移除(removeEventListener)是处理事件的关键。 3. **显示列表**:AS3的显示列表...

    jquery-ias.min.zip

    在标签中提到了"javascript",意味着这个插件是用JavaScript语言编写的,JavaScript是Web开发中最常用的语言之一,用于处理客户端的交互逻辑,如动态更新DOM(文档对象模型)元素,处理用户输入,以及像IAS这样的...

    宏观经济学05AD-AS模型.ppt

    宏观经济学05AD-AS模型.ppt

    vue3中使用threejs加载fbx模型.zip

    在Vue3中集成Three.js以加载FBX模型是一项常见的任务,尤其在开发3DWeb应用时。Three.js是一个强大的JavaScript库,用于在浏览器中创建和展示3D对象,而FBX是一种广泛使用的3D模型格式,它包含了丰富的动画和材质...

    宏观经济学原理课后习题及答案-第十四章 国民收入的决定:AD-AS模型.pdf

    1. AD-AS模型:AD-AS模型(Aggregate Demand-Aggregate Supply Model)是宏观经济学中分析国民收入决定的重要工具。AD曲线(总需求曲线)描绘了价格水平(P)与国内生产总值(GDP)或国民收入(Y)之间的负相关关系...

    NLP:用fastnlp搭建的情感分析模型.zip

    NLP:用fastnlp搭建的情感分析模型. 导入Pytorch包 import torch import torch.nn as nn from fastNLP.io.loader import CSVLoader dataset_loader = CSVLoader(headers=('raw_words','target'), sep='\t')

    vue使用three.js引入外部obj,mtl模型.zip

    import * as THREE from 'three' ``` 接下来,我们要处理外部的.obj和.mtl模型文件。.obj文件是3D对象数据格式,包含了3D模型的几何信息,而.mtl文件则包含了材质和纹理信息。Three.js提供了一个加载器`OBJLoader`...

    从零开始学习Flash AS3游戏开发.PDF

    - **事件驱动**:通过事件模型处理用户输入和其他系统事件。 - **强大的API支持**:包括图形渲染、音频/视频播放等功能。 --- ### 二、开发工具介绍 #### 2.1 FlashDevelop - **简介**:FlashDevelop是一款...

    倾斜摄影3dtile成果模型.zip

    使用contesxtcapture工具生成cesium支持的3dtile格式,加载解压后的json文件即可,效果参考https://blog.csdn.net/as320qqw/article/details/60573593

    vue-three 带动画的fbx,glif格式的模型,能成功导入模型.zip

    import * as THREE from 'three'; import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'; import { FBXLoader } from '@loaders.gl/fbx'; import { GLTFLoader } from '@loaders.gl/gltf'...

    AS3GeomExporter.zip

    AS3GeomExporter.zip 是一个针对3D建模软件3DS MAX的插件,它能够将三维模型导出为ActionScript 3(AS3)代码,以便在Adobe Flash环境中使用。这个工具对于那些希望在Web上展示3D内容,或者利用Flash的交互性来构建...

    西方经济管理学与AD-AS财务知识分析模型.pptx

    AD-AS模型结合了产品市场、货币市场和劳动力市场的分析,旨在阐述在不同市场之间如何达到经济的总体均衡。这个模型主要探讨了总需求(Aggregate Demand, AD)和总供给(Aggregate Supply, AS)之间的相互作用,以及...

Global site tag (gtag.js) - Google Analytics