当前位置: 首页 > 编程日记 > 正文

as3.0中如何阻止事件冒泡?

as3.0中的事件冒泡机制有时候会很烦人,比如一个Sprite(方便下文描述就命名为Container吧)把另一外Sprite(称为Child吧)做为子元素套进来以后,如果两个Sprite都注册了Mouse_Down事件,要想在Child上点击鼠标时系统只响应Child的Mouse_Down事件,默认是不行的,因为事件冒泡会让Container也响应Mouse_Down事件,示例代码:

package
{import flash.display.*;import flash.events.MouseEvent;public class EventTest extends Sprite{public function EventTest(){var _container:Sprite = createRectangle();var _child:Sprite = createRectangle(50,50,0x00ff00);var _sub_child:Sprite = createRectangle(25,25,0x0000ff);	_child.addChild(_sub_child);_container.addChild(_child);			addChild(_container);_container.y = _container.x = 50;_child.x = _container.width/2-_child.width/2;_child.y = _container.height/2-_child.height/2;		_sub_child.x = _child.width/2-_sub_child.width/2;_sub_child.y = _child.height/2-_sub_child.height/2;		_container.addEventListener(MouseEvent.MOUSE_DOWN,containerMouseDownHandler);			_child.addEventListener(MouseEvent.MOUSE_DOWN,childMouseDownHandler);			_sub_child.addEventListener(MouseEvent.MOUSE_DOWN,subChildMouseDownHandler);}private function subChildMouseDownHandler(e:MouseEvent):void{			trace("_sub_child.MOUSE_DOWN");}private function subChildMouseDownHandler2(e:MouseEvent):void{			trace("_sub_child.MOUSE_DOWN_2");}private function childMouseDownHandler(e:MouseEvent):void{trace("_child.MOUSE_DOWN");			}private function containerMouseDownHandler(e:MouseEvent):void{trace("_container.MOUSE_DOWN");}	private function createRectangle(width:uint=100,height:uint=100,color:uint=0xff0000):Sprite{var s:Sprite = new Sprite();s.graphics.beginFill(color,1);s.graphics.drawRect(0,0,width,height);s.graphics.endFill();return s;}}
}

鼠标点击最小的矩形后,输出如下:

_sub_child.MOUSE_DOWN
_child.MOUSE_DOWN
_container.MOUSE_DOWN

相当于点一个,触发了三个,要想阻止事件冒泡,可以调用e.stopImmediatePropagation()或stopPropagation()方法,即:

private function subChildMouseDownHandler(e:MouseEvent):void{e.stopImmediatePropagation(); //或//e.stopPropagation();trace("_sub_child.MOUSE_DOWN");
}

这样在_sub_Child上点击时,另外二个Sprite就不会响应Mouse_Down事件,但是stopImmediatePropagation方法与stopPropagation有什么区别呢?Adobe总不至于傻到弄二个功能一样的东东吧

官方的解释:

stopImmediatePropagation():void
防止对事件流中当前节点中所有后续节点中的事件侦听器进行处理。

stopPropagation():void
防止对事件流中当前节点后续节点中的所有事件侦听器进行处理。

有点绕口, 还是直接来看代码吧,把上面的示例改造一下,让_sub_Child的Mouse_Down事件同时添加二个监听

package
{import flash.display.*;import flash.events.MouseEvent;public class EventTest extends Sprite{public function EventTest(){var _container:Sprite = createRectangle();var _child:Sprite = createRectangle(50,50,0x00ff00);var _sub_child:Sprite = createRectangle(25,25,0x0000ff);	_child.addChild(_sub_child);_container.addChild(_child);			addChild(_container);_container.y = _container.x = 50;_child.x = _container.width/2-_child.width/2;_child.y = _container.height/2-_child.height/2;		_sub_child.x = _child.width/2-_sub_child.width/2;_sub_child.y = _child.height/2-_sub_child.height/2;		_container.addEventListener(MouseEvent.MOUSE_DOWN,containerMouseDownHandler);			_child.addEventListener(MouseEvent.MOUSE_DOWN,childMouseDownHandler);//注意:这里同时添加了二个监听,并设置了优点级(subChildMouseDownHandler2的优先级高于subChildMouseDownHandler1)_sub_child.addEventListener(MouseEvent.MOUSE_DOWN,subChildMouseDownHandler1,false,1);_sub_child.addEventListener(MouseEvent.MOUSE_DOWN,subChildMouseDownHandler2,false,2);}private function subChildMouseDownHandler1(e:MouseEvent):void{			trace("_sub_child.MOUSE_DOWN_1");}private function subChildMouseDownHandler2(e:MouseEvent):void{			trace("_sub_child.MOUSE_DOWN_2");}private function childMouseDownHandler(e:MouseEvent):void{trace("_child.MOUSE_DOWN");			}private function containerMouseDownHandler(e:MouseEvent):void{trace("_container.MOUSE_DOWN");}	private function createRectangle(width:uint=100,height:uint=100,color:uint=0xff0000):Sprite{var s:Sprite = new Sprite();s.graphics.beginFill(color,1);s.graphics.drawRect(0,0,width,height);s.graphics.endFill();return s;}}
}

重复刚才的测试,在最小的矩形_sub_Child上点击,输入如下:

_sub_child.MOUSE_DOWN_2
_sub_child.MOUSE_DOWN_1
_child.MOUSE_DOWN
_container.MOUSE_DOWN

然后把subChildMouseDownHandler2改成:

private function subChildMouseDownHandler2(e:MouseEvent):void{e.stopImmediatePropagation();trace("_sub_child.MOUSE_DOWN_2");
}

重复刚才的测试,输出如下:

_sub_child.MOUSE_DOWN_2

再试下stopPropagation方法

private function subChildMouseDownHandler2(e:MouseEvent):void{e.stopPropagation();trace("_sub_child.MOUSE_DOWN_2");
}

这回输出不同了:

_sub_child.MOUSE_DOWN_2
_sub_child.MOUSE_DOWN_1

小结:如果某对象的一个事件同时添加多个监听,stopPropagation将把该事件注册的所有监听处理函数执行完后,再阻止该事件继续向上冒泡;而stopImmediatePropagation方法将本次处理函数执行完后就立即阻止事件继续向上冒泡(即同一事件的其它监听函数将不会执行)。

转载于:https://www.cnblogs.com/yjmyzz/archive/2010/07/13/1776761.html

相关文章:

紫色回归线:雅虎中国的运筹学

共同体并不意味着一个我们可以获得享受的世界,而是一个我们热切希望栖息、希望重新拥有的世界。—— 齐格蒙特.鲍曼紫色回归线:雅虎中国的运筹学紫色是比较中性的颜色,但紫色在生活中却也是温柔、神秘、甚至性感的代词。当雅虎中国将主色调重…

JavaScript_上

javaScript JavaScript,简称JS,是Web开发中不可缺少的脚本语言的,不需要编译就可以运行(解释性语言)。它“寄生”在HTML体内,随网络传输到客户端在浏览器中运行。js代码可以写到html的任何地方。一般写在 body 结束标签…

java类加载的表现形式

java中的类是动态加载的,我们先看一下我们常用的类加载方式,先有一个感性的认识,才能进一步 深入讨论,类加载无非就是下面三种方式。 class A{} class B{} class C{} public class Loader{ public static void main(String[] args) throws Ex…

.net core在vs开发环境下脱离iis运行

.net core相比之前.net的是一个可以跨平台,脱离iis运行的语言,并且项目启动的效率要比用iis启动快,可以说进一步提高了开发的效率。要想自己的项目core脱离iis,首先选择vs启动项目的载体: 如下图,不要选择I…

Sublime遇见中文乱码问题?

今天在写demo的时候,突然发现html页面上的中文在浏览器上显示乱码~!!!!! 这时,我根据网上的提示安装了两个插件:converttoUtf-8,support Gbk ~~~然而,好像无济于事~~ 于是…

Dynamics AX 2009 升级PreSynchnoize时的无反应的解决

问题: 安装完升级补丁后在Data upgrade cockpit窗口点击Run或Train Run按钮后Update Job没有开始,始终显示为Ready状态。 #1 原因:数据库以前已经做过升级(例如安装过AX 2009 SP1)并且已经存在一个DataUpdate批处理组但是针对这个…

如何 搭建 RMAN 备份平台

一. RMAN 的一些理论知识RMAN Catalog 和 Nocatalog 的区别http://blog.csdn.net/tianlesoftware/archive/2010/06/02/5641763.aspxRMAN 系列(一)---- RMAN 体系结构概述http://blog.csdn.net/tianlesoftware/archive/2010/06/09/5659701.asp…

git更新代码报错,error: The following untracked working tree files would be overwritten by ch

git忽略大小写导致的, git config --add core.ignorecase true 转载于:https://www.cnblogs.com/newcbs/p/10732662.html

JavaScript_下_Dom

Dom对象 Dom对象:Document Object Model 文档对象模型。js是用来操作html的。 一个文档必须被加载到浏览器中,会按照HTML的层级结构转换成一个“家谱树”称为dom树。HTML文档里的所以的标签,属性,文本都会转换成dom树上的节点。 …

HDU 4300 Clairewd’s message

一道KMP的变式 本题仍是求最大前缀后缀,所以仍用KMP,但不同的是,本题有一个密码转换规则,不过好在题目中说了两段不重合,那么我们就可以在中间插入一个特殊符号*,保证求next数组时不会越过中线,…

GNS3模拟VPC注意几点

网上的GNS3入门到精通视频的确做得不错。现我写一下主要几点:1、创建MS lookback 适配器在添加硬件那里,并注意IP设置要在本地网卡同一子网,网关不用设置的。2、GNS3 的Dynamips目录的cygwin1.dll文件替代VPCS目录中文件。3、GNS3中的模拟PC先…

Windows Phone 7 Tip (5) -- App liftcycle

在新的trainning kit 中有一个例子解释的很清楚了: 1. Application_Launching:只有在新启动程序时触发 2. Application_Closing:只有在推出程序时触发--只有在程序mainpage时按硬后退键 3. Application_Activated:从home键或者其它…

npm i和npm install的区别

最近人用npm i来直接安装模块,但是有会报错,用npm install就不会报错,刚开始百思不得其解,它俩明明是同一个东西后来查npm的帮助指令发现还是没区别,npm i仅仅是npm install的简写: 实际使用的区别点主要如…

获取服务器路径的方式 【记录】

JSP页面获取服务器路径的方式 1.basePath方式 <% String path request.getContextPath(); String basePath request.getScheme()"://"request.getServerName()":"request.getServerPort()path"/"; %> 在url加入<%basePath%>如&…

系统安全设置部分项

1.设置合理的操作超时锁定&#xff08;10分钟以内&#xff09;&#xff0c;在恢复时需要重新鉴别。 开启连接超时 vim /etc/ssh/sshd_config ClientAliveInterval 120 //设置超时时间2分钟 ClientAliveCountMax 3 重启 /etc/init.d/sshd restart 2.设置TMOUT将自动在所设置…

简单的分级别写日志程序

/************************************************************************/ /* * 文件名称&#xff1a;write_log.cpp * 摘 要&#xff1a;此文件实现了普通WINDOWS程序中的日志功能 * 主要有以下特点&#xff1a; * 1. 根据日期创建日志文件目录&#xff0c;每天的日志分别…

达内——java变量

package xx;//为class文件分目录 import xx.xx//导入包中的类 public class 类名{ public static void main(String args[]){ } } 准备工作&#xff1a; jdk jre jvm gc idea pi 配置环境变量 变量名支持字母&#xff0c;数字&#xff0c;_和$&#xff0c;但是数字不能开头&…

JSON Web Tokens测试工具

JSON Web Tokens官方提供测试工具https://jwt.io某些静态资料需要链接google、twitter服务器&#xff0c;被墙无法访问。现在提供可以方法测试工具http://hingtai.cn:8000/转载于:https://www.cnblogs.com/birdstudio/p/7985617.html

oracle 分页写法

select * from (select ROWNUM RN ,TT.* from ( select * from YQ_FEED_BACK_MESSAGE WHERE MODEL_TYPE 3 AND FEED_BACK_TYPE4 order by FEED_BACK_DATE DESC)TT where rownum<5 )where RN >0

给GRUB添加新的项目

安装了win10&#xff0c;然后又安装了manjaro&#xff0c;最后又安装了Ubuntu。开机默认就是进入的Ubuntu的grub&#xff0c;然而我比较喜欢manjaro的grub主题。在bios中设置manjaro的引导为默认引导&#xff0c;但是此时manjaro的grub没有Ubuntu&#xff0c;进入到manjaro系统…

Netapp存储基础之WAFL, NVRAM, RAID, SnapShot

此章节是重点之重点。先讲基本概念。WAFL的全称是Write Anywhere File Layout. 从类似于其它UNIX的文件系统比如Berkeley Fast File System (FFS) 和 TransArc Episode file system. 它的核心理念是"文件任意地方写"。先说普通的文件系统&#xff0c;是由inode和data…

读取本地照片 以流的形式进行显示

获取到前端传来的文件名称&#xff0c;到相应的文件中去读取&#xff0c;通过流的形式写到响应体中。 /*** 显示图片 * getFeedBackPicture.do?picName* return*/RequestMapping(value"/viewPhoto/{photopath}")public void getFeedBackPicture(HttpServletRespons…

如何轻松搞定机构资格准入?

银联的“资格入网”虽涉及环节庞杂&#xff0c;但杂而有序&#xff0c;初次接触银联的机构极有可能不知道先从哪一步骤开始&#xff0c;很多用户甚至不知道该怎么填写材料&#xff0c;所以我整理了一份详细的入网流程&#xff0c;以供大家参考&#xff0c;希望能帮助到大家~ 入…

eclipse CreateProcess error=87 的解决办法

有的说是 ClassPath过长&#xff0c;有的说是Eclipse插件导致最后 在这里得到解决啦http://code.google.com/p/googleappengine/issues/detail?id1862In C:\google\appengine-java-sdk-1.3.1\config\user\ant-macros.xmlChange line 102from<fileset dir"{war}/WEB-IN…

学习javascript 非常好的博客

这个大牛写的非常好&#xff01;&#xff01;推荐一下 http://www.cnblogs.com/xiaohuochai/tag/javascript%E6%80%BB%E7%BB%93/default.html?page8 小火柴的蓝色理想 转载于:https://www.cnblogs.com/oxspirt/p/7987342.html

Flex自定义组件

项目中需要用到如下一个效果。下图中五个圆代表一个五孔的梅花管。客户在后台操作时需要编辑梅花管的每个子孔占用情况。客户的要求是&#xff1a;点击某一个孔&#xff0c;小孔变黑&#xff0c;表明此孔被占用&#xff1b;再次点击&#xff0c;则小孔再变成透明圆形&#xff0…

解决在SQL Server 2000的存储过程不能调试

本机上: 控制面板—>管理工具—>服务—>MSSQL&#xff08;默认的ID&#xff09;—>属性—>登陆—>选一个Windows帐户&#xff0c;填写密码&#xff0c;再重新启动SQL Server 2000就可以调试存储过程了。 看一看sql数据库的版本&#xff0c;如果是kf版则不能进…

springboot打成jar后获取classpath下的文件

直接上代码 JAR包用这个 //获取容器资源解析器ResourcePatternResolver resolver new PathMatchingResourcePatternResolver();// 获取远程服务器IP和端口try {//获取所有匹配的文件Resource[] resources resolver.getResources("static/images/faceSearch/*.*"…

thymeleaf : input/select/radio回显

thymeleaf中不用自己去写checked"checked" selected"selected"这种代码&#xff0c;他自己会选。 input <input type"text" class"form-control1" id"name" name"name" th:value"${user.name}"> …

Spark MLlib之使用Breeze操作矩阵向量

这下面的练习中&#xff0c;需要自己将spark的jar包 添加进来。 1.spark Mlib 底层使用的向量、矩阵运算使用了Breeze库。 scalaNLP 是一套 机器学习和数值技算的库。它主要是关于科学技术&#xff08;sc&#xff09;、机器学习&#xff08;ML&#xff09;和自然语言处理&#…