Aa3.0 事件机制
说明:本文由多处网络文章整理而成,在此未一一注明原文链接,敬请谅解!
AS3:事件流机制
- 只要发生事件,Flash Player就会调度该事件对象。
- 如果事件目标不在显示列表中,则Flash Player将事件对象直接调度到事件目标。
- 如果事件目标在显示列表中,则Flash Player将事件对象调度到显示列表,然后该事件对象将在显示列表中进行一次从舞台到“目标节点”的往返行程。
- 事件流说明事件对象如何在显示列表中穿行,分为三部分:
- 第一部分称为捕获阶段,该阶段包括从舞台到目标节点的父节点范围内的所有节点。
- 第二部分称为目标阶段,该阶段仅包括目标节点。
- 第三部分称为冒泡阶段,冒泡阶段包括从目标节点的父节点返回到舞台的行程中遇到的节点。
事件流示意图

其他
并所有事件对象都参与事件流的所有三个阶段。某些类型的事件(例如enterFrame和init类型的事件)会直接调度到目标节点,并不参与捕获阶段和冒泡阶段。其它事件可能以不在显示列表中的对象为目标,例如调度到Socket类的实例的事件。这些事件对象也将直接流至目标对象,而不参与捕获和冒泡阶段。
扩展理解
在事件流中的每一层显示对象都能够采用addEventListener()方法监听该事件对象,但是考虑到addEventListener()方法的一个参数useCapture:Boolean(default = false),在默认情况下监听器只工作在目标阶段和冒泡阶段,而忽略捕获阶段。
其它述明:
1、事件机制的核心
核心主要有两个类:EventDispatcher(事件的派发和接收者),Event(事件类)
EventDispatcher是事件的源头和终点,而Event则充当着整个事件流中的引线。
2、事件机制的3个阶段
Event有一个属性:eventPhase,可以为以下3个值:
捕获阶段 (EventPhase.CAPTURING_PHASE)。目标阶段 (EventPhase.AT_TARGET)。冒泡阶段 (EventPhase.BUBBLING_PHASE)。
注意:事件中的捕获阶段以及冒泡阶段只会在可视对象的事件流中发生,也就是说事件的派发者是DisplayObject才会发生捕获阶段以及冒泡阶段!!!
实例:
如下图所示(A、B、C都是Sprite)
注意:MouseEvent.CLICK默认是会冒泡的!!!

先有如下代码:
A.addEventListener(MouseEvent.CLICK, clickA);A.addEventListener(MouseEvent.CLICK, clickA_capture, ture);//捕获B.addEventListener(MouseEvent.CLICK, clickB);B.addEventListener(MouseEvent.CLICK, clickB_capture, ture);//捕获C.addEventListener(MouseEvent.CLICK, clickC);C.addEventListener(MouseEvent.CLICK, clickC_capture, ture);//捕获function clickA(e:MouseEvent):void{ trace("clickA");}function clickA_capture(e:MouseEvent):void{ trace("clickA_capture");} function clickB(e:MouseEvent):void{ trace("clickB");} function clickB_capture(e:MouseEvent):void{ trace("clickB_capture");} function clickC(e:MouseEvent):void{ trace("clickC");} function clickC_capture(e:MouseEvent):void{ trace("clickC_capture");} |
(1)、第一种情况:点击A
输出为:
clickA_capture
clickA
(2)、第二种情况:点击B
输出为:
clickA_capture
clickB_capture
clickB
clickA
(3)、第三种情况:点击C
输出为:
clickA_capture
clickB_capture
clickC_capture
clickC
clickB
clickA
结论:由以上实验,再结合官方的说明可以知道:
*捕获是第一个阶段,当一个事件发生后,首先进入捕获阶段,从事件派发者的父亲一直找到stage,将所有一遍历的结点保存,然后从stage开始查找是否有捕获方法,一直到事件派发者为止,这时候捕获阶段结束。
*目标阶段是第二个阶段,目标阶段从名称上就可以知道就是事件的派发者这个阶段,会依次查找捕获方法和非捕获方法,然后结束目标阶段。
*冒泡阶段是最后一个阶段,从事件派发者开始一路向parent找是否有监听方法,依次调用,一直到stage。
4、关于target和currentTarget
首先,target永远是事件的派发者,而currentTarget则会根据当前不同的阶段有所改变,也就是说谁监听事件,当执行这个事件方法的时候谁就是currentTarget。
5、冒泡的应用
举个例子,当一个可视对象容器包含了100个按钮的时候,如果对每一个按钮都去监听其实很不划算。
更好的做法是对这个容器监听,然后在监听方法中判断target是哪个对象。
Aa3.0 事件机制的更多相关文章
- Cocos2d-X3.0 刨根问底(七)----- 事件机制Event源码分析
这一章,我们来分析Cocos2d-x 事件机制相关的源码, 根据Cocos2d-x的工程目录,我们可以找到所有关于事件的源码都存在放在下图所示的目录中. 从这个event_dispatcher目录中的 ...
- (转载)AS3.0实例学习 熟悉新的事件机制和addChild的运用
(转载)http://www.jb51.net/article/13139.htm 首先声明:本人大菜鸟一个,刚接触AS3不久,许多理念还没来得及灌输,这些case都是从网上down的,但因为解说是英 ...
- 【移动端兼容问题研究】javascript事件机制详解(涉及移动兼容)
前言 这篇博客有点长,如果你是高手请您读一读,能对其中的一些误点提出来,以免我误人子弟,并且帮助我提高 如果你是javascript菜鸟,建议您好好读一读,真的理解下来会有不一样的收获 在下才疏学浅, ...
- tkinter事件机制
一.tkinter.Event tkinter的事件机制跟js是一样的,也是只有一个Event类,这个类包罗万象,集成了键盘事件,鼠标事件,包含各种参数. 不像java swing那种强类型事件,sw ...
- [解惑]JavaScript事件机制
群里童鞋问到关于事件传播的一个问题:“事件捕获的时候,阻止冒泡,事件到达目标之后,还会冒泡吗?”. 初学 JS 的童鞋经常会有诸多疑问,我在很多 QQ 群也混了好几年了,耳濡目染也也收获了不少,以后会 ...
- JavaScript 详说事件机制之冒泡、捕获、传播、委托
DOM事件流(event flow )存在三个阶段:事件捕获阶段.处于目标阶段.事件冒泡阶段. 事件捕获(event capturing):通俗的理解就是,当鼠标点击或者触发dom事件时,浏览器会 ...
- DOM事件机制进一步理解
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- javascript 中的事件机制
1.javascript中的事件. 事件流 javascript中的事件是以一种流的形式存在的. 一个事件会也有多个元素同时响应. 有时候这不是我们想要的效果, 我们只是需要某个特定的元素相应我们的绑 ...
- Javascript事件机制兼容性解决方案
本文的解决方案可以用于Javascript native对象和宿主对象(dom元素),通过以下的方式来绑定和触发事件: 或者 var input = document.getElementsByTag ...
随机推荐
- JavaScript –type
JavaScript –类型之我晕 每次写博我觉得取上恬当的题目比整篇行文都难,词量有限的情况下突然想到JavaScript拾遗应该会是一个非常文艺而夺目的博文题目,但我并没有急着使用,经验告诉我应该 ...
- 不想作死系列---virtualbox最小化安装centos6.5
背景: 最近已经重装了5个系统,实在不想折腾了.于是打算在虚拟机中安装所需环境. 系统版本: 宿主机:win7 virtualbox4.3.10 centos 6.5(final) 1.下载安装vir ...
- python文件的中文处理以及个人思路
环境:ubuntu12.04 python2.7 涉及:ascii,utf-8,gbk,gb2312 首先说下个人处理过程中遇到的问题: 任务是这样:有大概4000个txt,将他们合并到一个文件里, ...
- LNMP安装与配置
Nginx与apache.lighttp性能综合对比,如下图: 注意:关闭rpm默认安装的apache和mysql 1.准备php函数的rpm包 y ...
- hdu 4467 Graph
P. T. Tigris is a student currently studying graph theory. One day, when he was studying hard, GS ap ...
- HTML <form> 标签的 enctype 属性
HTML <form> 标签 定义和用法 enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码. 默认地,表单数据会编码为 "application/x-www- ...
- CSS倒影
前面的话 CSS倒影目前只有chrome和safari浏览器支持,且需要添加-webkit-前缀.本文将详细介绍CSS倒影box-reflect 语法 -webkit-box-reflect 初始 ...
- Kattis - Biased Standings
Biased Standings Usually, results of competitions are based on the scores of participants. However, ...
- 第一百三十一节,JavaScript,封装库--CSS
JavaScript,封装库--CSS 将封装库里的方法,改成了原型添加方法 增加4个方法 tian_jia_class()方法,给获取到的元素添加class属性,参数是class属性值,可以连缀1 ...
- 使用signalR创建聊天室。
浏览器支持Html5的情况下,SignalR使用WebSockets,当不支持时SignalR将使用其它技术来实现通讯. 界面如下:左侧包含三种聊天对象,不同的聊天对象会创建不同的对话框. 设计思路参 ...