- 浏览: 248215 次
- 性别:
- 来自: 厦门
文章分类
最新评论
-
topbox163:
图片显示不了
Flex 学习曲线图 -
彭利贤:
你好,想请教您一些关于flash的问题,您可以加我qq吗 59 ...
全屏flash的尺寸分析 -
jingj6:
是开源的吗?
小日本做的非常强大的一款AS3 3D引擎 -
hugh52066:
LZ牛B。
Flex 学习曲线图 -
sweed0:
a dream~~
一个让人瞠目结舌的传奇电脑高手!
8.2 事件机制的工作流程
8.2.1 关于事件流
目标对象:派发事件的对象
当事件发生后生成一个携带数据的对象,然后检查目标对象是否存在显示层中,并遍历从根容器一直到目标对象所在位置的所有对象,以树形势表示。自动检测所经过的节点是否注册了监听器。
事件流暗运行流程分为3步:
当事件发生后生成一个携带数据的对象,然后检查目标对象是否存在显示层中,并遍历从根容器一直到目标对象所在位置的所有对象,以树形势表示。自动检测所经过的节点是否注册了监听器。
事件流暗运行流程分为3步:
- 捕获阶段:捕获事件 capturing,从根节点开始顺序而下,检测每个节点是否注册了监听器。同时,Flex 将事件对象的currentTarget 值改为当前正在检测的对象。如果注册了监听器,则调用监听函数。
- 目标阶段:检测目标的监听器 targeting:触发在目标对象本身注册的监听程序
- 冒泡阶段:事件冒泡 bubbling:从目标节点到根节点,检测每个节点是否注册了监听器,如果有,则调用监听函数。
每个事件对象都有以下属性:
target:事件的派发者
currentTarget:当前正在检测的的对象,帮助跟踪事件传播的过程。
默认情况下,捕获功能处于关闭状态,一般没有必要进行捕获跟踪。
事件只在bubbles 属性为true 时才进行冒泡,可以冒泡的事件包括:change、click、doubleClick、keyDown、keyUp、mouseDown、 mouseUp。并且不能在一个监听器中同时打开捕获和冒泡功能,要做到这一点,只能注册两个监听器,分别实现。
现在来看一个例子:
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()"> <mx:Style source="style.css" /> <mx:Script> <![CDATA[ import flash.events.MouseEvent; internal function initApp():void{ canvas_1.addEventListener(MouseEvent.CLICK,pressBtn,true); canvas_2.addEventListener(MouseEvent.CLICK,pressBtn); btn_1.addEventListener(MouseEvent.CLICK,pressBtn); btn_2.addEventListener(MouseEvent.CLICK,pressBtn); } internal function output(msg:String):void{ debug_txt.text += msg+"\n"; } internal function pressBtn(evt:MouseEvent):void{ output("是否冒泡--"+evt.bubbles); output("目标对象-- "+evt.target+" -- "+evt.eventPhase); output("遍历对象-- "+evt.currentTarget); output("------------"); } ]]> </mx:Script> <mx:Canvas id = "canvas_1" styleName="box" x="37" y="63" width="445" height="216"> <mx:Text x="13" y="10" text="Canvas_1"/> <mx:Canvas id="canvas_2" styleName="box" x="10" y="102" width="173" height="90"> <mx:Text x="10" y="10" text="Canvas_2"/> <mx:Button id = "btn_2" x="10" y="38" label="Button_2"/> </mx:Canvas> <mx:Button id="btn_1" x="16" y="38" label="Button_1"/> </mx:Canvas> <mx:TextArea id="debug_txt" styleName="textBox" x="37" y="304" height="198" width="445"/> </mx:Application>
- target:派发事件的目标对象
- currentTarget:事件流当前正经过的目标对象
- bubbles:是否打开了冒泡功能
- eventPhase:事件流当前的阶段,1:捕获,2:目标,3:冒泡
addEventListener(
type:String, 事件的类型
listener:Function, 监听函数
useCapture:Boolean = false, 是否打开捕获功能
priority:int = 0, 监听器优先级别
useWeakReference:Boolean = false 是否使用弱引用
)
如果useCapture 为true,打开了捕获功能,则该组件的冒泡阶段被取消。
只有可视化的对象有3个阶段,而像XML等非可视化对象只有目标阶段。
8.2.2 事件对象
EventDispatcher 是派发事件的武器,经它派发的事件对象必须是Event类型或者Event的子类。
Event对象中包含目标对象存放的数据,这些数据都成为Event的属性,以供侦听器使用:
Event的属性:
Event对象中包含目标对象存放的数据,这些数据都成为Event的属性,以供侦听器使用:
Event的属性:
- bubbles:只读,布尔,事件是否开启冒泡功能
- cancelable:只读,布尔,处理事件的默认行为是否可以停止。主要针对一些系统事件,如果值为true,则Event的preventDefault方法可以使用,否则不可用。
- currentTarget:只读,对象,当前正在调用监听器的对象
- eventPhase:只读,整数,返回事件流正经历的阶段。1:捕获,2:目标,3:冒泡
- target:只读,派发事件的目标对象
- type:只读,字符,事件类型。比如鼠标点击事件的类型:click,并被定义为常量:MouseEvent.CLICK
构造函数:
Event(
type:String, 事件类型
bubbles:Boolean = false, 是否冒泡
cancelable:Boolean = false 是否可以停止
)
Event 的方法:
- isDefaultPrevented:判断preventDefault 是否已经被调用
- preventDefault:停止事件的默认行为。针对一些系统事件,cancelable为true时才可用。
- stopImmediatePropagation:停止当前的事件流传播,包括当前正在处理的对象
- stopPropagation:停止当前的事件流传播,但不会停止当前正在处理的对象
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()"> <mx:Style source="style.css" /> <mx:Script> <![CDATA[ import flash.events.MouseEvent; internal function initApp():void{ canvas_1.addEventListener(MouseEvent.CLICK,CanvasHandler); canvas_2.addEventListener(MouseEvent.CLICK,CanvasHandler); canvas_2.addEventListener(MouseEvent.CLICK,pressBtn); btn_1.addEventListener(MouseEvent.CLICK,pressBtn); } internal function output(msg:String):void{ debug_txt.text += msg+"\n"; } internal function pressBtn(evt:MouseEvent):void{ output("是否冒泡--"+evt.bubbles); output("目标对象-- "+evt.target+" -- "+evt.eventPhase); output("遍历对象-- "+evt.currentTarget); output("------------"); } internal function CanvasHandler(evt:MouseEvent):void{ output("目标对象-- "+evt.currentTarget+" -- "+evt.eventPhase); //停止事件流的传播 evt.stopImmediatePropagation(); //evt.stopPropagation(); } ]]> </mx:Script> <mx:Canvas id = "canvas_1" styleName="box" x="37" y="63" width="425" height="160"> <mx:Text x="13" y="10" text="Canvas_1"/> <mx:Canvas id="canvas_2" styleName="box" x="10" y="52" width="173" height="90"> <mx:Text x="10" y="10" text="Canvas_2"/> <mx:Button id = "btn_1" x="10" y="38" label="Button_1"/> </mx:Canvas> </mx:Canvas> <mx:TextArea id="debug_txt" styleName="textBox" x="37" y="245" height="198" width="425"/> </mx:Application>
8.2.3 侦听和响应事件--一个侦听键盘事件的例子
要侦听一个事件,首先要创建一个函数来作为事件处理器,然后将这个函数注册给相应的时间类型。
this.addEventListener(KeyboardEvent.KEY_DOWN,keyHandler);
注册键盘按下事件,交给keyHandler处理,也可以在Application标签添加事件:
keyDown="keyHandler(event)" 这种情况无法移除事件。
注册了事件监听器,使用完毕后,必须使用removeEcentListener 方法删除监听函数:
removeEcentListener(
type:String, 事件类型
listener:Function, 监听函数
useCapture:Boolean = false 是否开启捕获功能,如果注册时打开,移除也要打开。
)
this.addEventListener(KeyboardEvent.KEY_DOWN,keyHandler);
注册键盘按下事件,交给keyHandler处理,也可以在Application标签添加事件:
keyDown="keyHandler(event)" 这种情况无法移除事件。
注册了事件监听器,使用完毕后,必须使用removeEcentListener 方法删除监听函数:
removeEcentListener(
type:String, 事件类型
listener:Function, 监听函数
useCapture:Boolean = false 是否开启捕获功能,如果注册时打开,移除也要打开。
)
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()"> <mx:Style source="style.css" /> <mx:Script> <![CDATA[ import flash.events.KeyboardEvent; internal function initApp():void{ this.addEventListener(KeyboardEvent.KEY_DOWN,keyHandler); } private function keyHandler(e:KeyboardEvent):void{ var str:String = "你按下的是: "+e.keyCode; debug_txt.text += str +"\n"; } ]]> </mx:Script> <mx:TextArea id="debug_txt" styleName="textBox" x="25" y="78" height="198" width="212" editable="false"/> <mx:Text x="25" y="50" text="按键盘上的任意键"/> </mx:Application>
发表评论
-
如何使用Cairngorm3的导航库(Spring AS)
2011-08-29 17:39 2855一、概述 二、LIB库包配置 下载需要的LIB库 ... -
Flex学习笔记_06 使用行为对象和动画效果_ 放缩\调整大小效果
2008-09-28 16:47 37656.3.2 放缩效果和调整大 ... -
Flex学习笔记_06 使用行为对象和动画效果_模糊、发光效果
2008-09-27 22:33 31326.3.1 模糊效果和发光效 ... -
Flex学习笔记_06 使用行为对象和动画效果_认识行为对象、行为和组件
2008-08-17 01:30 21806.1 认识行为对象 6.1.1 什么是行为对象 行 ... -
Flex学习笔记_09 数据绑定_运用实例
2008-07-28 23:41 32159.3.1 实现界面的多语言切换 <?xml vers ... -
Flex学习笔记_09 数据绑定_晋级篇
2008-07-28 22:27 28349.2.1 函数和类级别的绑 ... -
Flex学习笔记_09 数据绑定_概念、使用
2008-07-21 23:32 20429.1 认识数据绑定 9.1.1 数据绑定的概念 ... -
Flex学习笔记_08 Flex的事件机制_高级应用
2008-07-16 23:11 31728.3 事件机制的高级应用 8.3.1 事件的优先级别和 ... -
Flex学习笔记_08 Flex的事件机制_事件架构
2008-07-14 08:54 24558.1 一切从事件开始 8.1.1 关于事件 事件有 ... -
Flex学习笔记_07 ActionScript 3.0 编程基础_数据类型及其运算、程序流程
2008-07-13 19:21 46107.3 数据类型和数据运算 7.3.1 关于数据类型 ... -
Flex学习笔记_07 ActionScript 3.0 编程基础
2008-07-09 23:15 28537.1 了解 ActionScript 3.0 7.1 ... -
Flex学习笔记_06 使用组件处理数据和交互_03控件的实例应用
2008-07-06 14:26 25543. 控件的实例应用 3.1 制作一个简单的涂鸦板 ... -
Flex学习笔记_06 使用组件处理数据和交互_02导航类组件
2008-07-02 00:04 29622. 导航类组件 2.1 ToggleButtonBa ... -
Flex学习笔记_06 使用组件处理数据和交互_01常用组件(下)
2008-06-30 10:37 4576Flex学习笔记_06 使用组 ... -
Flex学习笔记_06 使用组件处理数据和交互_01常用组件(中)
2008-06-29 22:50 3934Flex学习笔记_06 使用组件处理数据和交互_01常用组件( ... -
Flex学习笔记_06 使用组件处理数据和交互_01常用组件(上)
2008-06-26 23:11 4491Flex学习笔记_06 使用组件处理数据和交互_01常用组件( ... -
Flex学习笔记_05 使用容器控制界面布局_03动态布局、导航容器、表单布局
2008-06-25 08:40 6682本文的相关文章: Flex学习笔记_05 使用容器控制界面布局 ... -
Flex学习笔记_05 使用容器控制界面布局_02窗口布局
2008-06-24 09:07 5070本文的相关文章: Flex学习笔记_05 使用容器控制界面布局 ... -
Flex学习笔记_05 使用容器控制界面布局_01管理程序的布局
2008-06-23 23:52 5609本文的相关文章: Flex学习笔记_05 使用容器控制界面布局 ... -
Flex学习笔记_04 MXML语言简介
2008-06-17 22:52 54221. MXML语法 MXML语言是专门用于Flex程序中, ...
相关推荐
Flex学习笔记_09 数据绑定_概念、使用 - Java&Flex - JavaEye技术网站 希望对爱好有帮助!!
Flex学习笔记Flex学习笔记Flex学习笔记Flex学习笔记Flex学习笔记
flex学习笔记 flex学习笔记 flex学习笔记 flex学习笔记 flex学习笔记 flex学习笔记
最近开始学习Flex,其中用到了AS,AS2到AS3发生了很大的变化,完全的面向对象,知道这个特点以后我也一直没有特意的好好去学学AS3,但是随着最近学习的深入,还是有必要学习一下
这是作者自己亲自编写的教程,里面包含的有图解教程,各式jar,及配置文件,全部包含在内,如果你是一个决定学习flex初学者,我敢保证它肯定适合你!带上你走上flex开发旅途!
Flex学习笔记1
2.5 事件处理 Event 12 2.6异常和错误处理 13 3.Flex组件 15 3.1布局设计 15 3.3 MXML Module模块应用 16 3.4 表单 16 3.5 对话框 17 3.6 列表 18 3.7弹出菜单 19 3.8复杂用户交互应用结构 21 3.8.1 Tree高级应用 21...
flex 学习笔记 初学flex的朋友 可以下载了看看 老鸟直接飘过。。。
Flex学习笔记(flex必知必会).docFlex学习笔记(flex必知必会).doc
Flex_4.0_RIA开发详解电子书。和笔记差不多,喜欢的朋友可以下载,当学习笔记用。最新的哦。
NULL 博文链接:https://z-one.iteye.com/blog/609269
flex学习笔记,刚刚入门的可以看一下,有什么问题可以和我联系,谢谢
Flex新手学习的好东西,对刚学习Flex的新手帮助很大!
flex笔记 总结了actionscript在flex这的应用等 想想会有一定的帮助
包含了我做项目的时候用到的很多flex小技巧!期间又很多问题都是自己搜索资料解决的
收集自JavaEye网站enboga老大的blog,不错的Flex学习资料。
很详细的flex学习笔记也是我在网络上搜集到的,但是对于flex学习很有帮助
该文档主要介绍Flex开发学习的入门基础知识。
flex详解 很详细 希望你学的更好 我就是通过这个学的 希望对爱好者有帮助~~
第一章 Flex简介和开发环境 第二章 AS3语法 第三章 事件驱动 第四章 自定义事件 第五章 数据绑定 第六章 样式表和主题 .....实习之