- 浏览: 716638 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (389)
- flex (150)
- java (55)
- flex_sharedObject (4)
- iphone/android (7)
- red5 (4)
- blazeds (19)
- ajax (3)
- flex&java (9)
- 聊天室 (2)
- flex的问题 (1)
- game (8)
- flex_xml (1)
- flex组件学习 (2)
- JGroups (1)
- 中转站 (2)
- ruby (7)
- flex_js (5)
- C/C++ (14)
- perl (2)
- db (13)
- air (10)
- hibernate (8)
- flash_flex_as_3d (2)
- struts (4)
- dwr (8)
- freemarker (2)
- AS (22)
- 工具 (6)
- js_jquery_ext_yui (4)
- .net (1)
- C# (1)
- 前端 (1)
最新评论
-
136900923:
您好,您的代码我不是很懂,我想跟您交流一下,我的qq邮箱:13 ...
hibernate做无限极菜单树如此简单 -
fykyx521:
两个同一个功能
flex_flush_Socket 安全沙箱解决 -
ustb:
你上下两个代码类之间没关系
flex_flush_Socket 安全沙箱解决 -
u010656335:
...
flex发送QQ表情 -
u010656335:
flex发送QQ表情
AS3 event flow 事件冒泡机制 以及 stopImmediatePropagation() stopPropagation()用法
- 博客分类:
- AS
大家好,今天亦乐首次为大家带来flash actionscript转载教程。首先声明出处(我自己是没时间写教程啦,要直接找我讨论还好) 今
天,我也正式宣布,开始成为闪客,以往对macromedia
flash的许多头疼问题都被adobe解决了,以往一直否认我喜欢做flash,现在总算可以为adobe flash
自豪。非常有系统的developing方式。RIA 平台, on screen project就不这里说了。 这期带来的是flash极重要元素之一,event事件。在游戏里就是所谓的Trigger. Adobe改良后的,大家谓称的“冒泡机制”。有问题欢迎发问指教。 =思路大纲= stage里有一个mc,mc里有一个btn 表面来看,这个思路是正确的。(实际上没什么思路可言,很简单的方法。) 2 - AS3解决问题
下面来看as3中怎么实现。 function mcfunction(event:MouseEvent) { 看看代码就觉得,好像没用什么特别的解决方法,就加两个侦听函数,就搞定了。 3 - 结合问题,说明冒泡机制:
捕获阶段:
注
意一个:首先执行的函数一定是目标对象的侦听函数。就像我们上面的例子一样,点击btn会先trace(“btn
click”),然后冒泡到mc,执行trace(“mc
click”)..然后继续往上,如果stage我们也加一个侦听函数,执行语句,那么还会继续执行 trace(“stage click”). 4 - 冒泡的问题所在以及解决方法
用来修改我们上面的例子 现在可以试试,点击btn运行得到的结果就是 说明,已经防止了冒泡阶段中对mc侦听函数的处理。也就没有trace(“mc click”)了http://yzzelliot.spaces.live.com/blog/cns!5428063AEA721F64!875.entry
学了这长时间时间,基本的都不懂
AS3 event flow 事件冒泡机制 以及 stopImmediatePropagation()
stopPropagation()
版权声明
:转载时请以超链接形式标明文章原始出处和作者信息及
本声明
http://goday.blogbus.com/logs/14062836.html
1 - ActionScript 2的问题
点选mc实现拖动mc,鼠标松开停止拖动
点选mc实现mc隐藏。
最容易想到的方法,代码如下:
mc.onPress = function() {
this.startDrag();
};
mc.onRelease = function() {
this.stopDrag();
};
mc.btn.onPress = function() {
mc._visible=false
};
实际怎么样?当然是不能实现。
问题:点击btn,不能触发btn的动作!!!!
解释: 因为btn处于mc内部,mc被加上了事件以后,按照as2的事件机制,mc内部的btn甚至是其他的元件都不能接受事件。或者可以认为mc的事件覆盖了mc中其他元件的事件。
从
非冒泡机制来说,在btn上点击鼠标,首先接受到点击事件的自然是btn的上一层(也就是mc),然后才是btn元件。Mc先接受到点击事件,触发相关的
函数。然后呢?我们要实现的点击btn的效果没了。我们可以认为mc把我们的鼠标点击事件据为私有了,不再往下传递。(如果是冒泡机制的话,这个动作就回
继续往下传递到btn,然后btn会执行。)那么这种效果在as2中还能实现么?答案自然是肯定的,不过方法就复杂了。
这里就不讨论了。As3已经成为主流。
但是as3中的冒泡机制,让我们可以简单的解决这样的难题。
代码如下:
import flash.events.*;
mc.addEventListener(MouseEvent.CLICK,mcfunction);
mc.btn.addEventListener(MouseEvent.CLICK,btnfucntion);
trace("mc click");
}
function btnfucntion(event:MouseEvent) {
trace("btn click");
}
这个代码自然的不能再自然了,就好像做flash 先的安装软件一样。
但是如此自然的代码下面,使AS3的冒泡机制在提供支持。
Help中有一个冒泡机制的图,相信大家都已经看过了
这里我联系实例,另外做一个图,帮助各位理解。
上图为as2中的执行原理
下图为as3中的执行原理
上图也就是在as3中实现我们文章开始提出的例子的工作原理。
下面详细描述一下
鼠
标在btn上发出点击事件,首先捕捉到该事件的事stage.,然后事件往下传递到mc,再到btn..(如果鼠标事件发生在btn按钮中的一个
label上,那么该事件还会继续向下传递,直到找到label元件。)AS2中,一旦找到了可以相应事件的函数,就停止了,不会往下传递。这个道理应该
说明白了
目标阶段
:
找到我们的鼠标最底层的目标,也就是btn以后,那么就开始执行btn的侦听函数了。
如果鼠标事件发生的所在位置,是mc中的btn中的一个label。那么将先执行label的侦听函数。(当然我们的例子中没有label)
冒泡阶段:
执行了目标阶段的侦听函数以后,开始冒泡。
换一个说法是,返回btn的父级元件mc,如果能找到相关的侦听函数,那么就执行,如果没有,就继续往上冒泡到btn的父级元件mc的父级元件stage。看能不能找到相关的侦听函数。
到达stage顶层了,冒泡结束。
说到这里,各位看官也应该明白了as3的冒泡究竟是干什么用的了
冒泡也有问题,并不是说它有缺陷,因为出现问题无法避免。
问题在于,
假如在上面的例子中,我们不想在点击btn冒泡阶段中执行mc的侦听函数,我们只想执行btn的侦听函数。怎么解决?
同样的问题延伸出去,可以得到很多扩展和应用。
那么我们需要阻止他的冒泡的时候执行相关的侦听函数。
Chm中的方法有 stopImmediatePropagation():void
防止对事件流中当前节点中和所有后续节点中的事件侦听器进行处理。
stopPropagation():void
防止对事件流中当前节点的后续节点中的所有事件侦听器进行处理。
代码如下:
import flash.events.*;
mc.addEventListener(MouseEvent.CLICK,mcfunction);
mc.btn.addEventListener(MouseEvent.CLICK,btnfucntion);
function mcfunction(event:MouseEvent) {
trace("mc click");
}
function btnfucntion(event:MouseEvent) {
trace("btn click");
event.stopPropagation();//修改在此处。简单一句,解决问题
}
代码:
btn click
As3事件机制远远不像这里写的那么简单,还有很多东西需要研究。
本文只为抛砖引玉,让各位能先了解一下冒泡机制。
希望能多的朋友能提供相关的学习资料
发表评论
-
转深入理解Flash的沙箱 – Security Domains
2014-01-22 09:35 837一篇很经典的进阶文章,国外牛人的分享,清晰明了,图文并茂,适 ... -
[IE6 only]关于Flash/Flex,返回数据产生流错误Error #2032的解决方式
2010-11-19 14:04 2385转自:http://www.xintend.com/Artic ... -
as3_Matrix3d
2010-09-10 15:45 2328Matrix3D 类使用一个 4x4 正方形矩阵,即一个由 ... -
as3中matrix 解释,终于找到了
2010-09-10 14:57 4826转自:http://blog.sina.com.cn/ ... -
flash安全沙箱_解决测试时安全沙箱的问题
2010-07-18 18:15 1206自己测试的swf 老报安全沙箱 以前看到帖子 设置一个安全文件 ... -
flashlog.txt配置
2010-04-08 15:34 2499本工具特点:1、简单又 ... -
flex as3 元数据标签综合
2010-01-04 13:50 1336http://www.cnblogs.com/chocol ... -
Flex实际复杂项目中RSL(运行时共享库)的使用方法
2010-01-04 13:37 2716http://flash.9ria.com/thread-42 ... -
event.preventDefault() 取消事件的默认行为
2009-12-28 18:53 6062http://blog.csdn.net/xiang08/ar ... -
gTween:轻便的as3缓动类库分享
2009-12-25 13:25 2245前不久做一个作品,想加入一些复杂点的缓动效果,想到gTween ... -
AS3应用程序模块化开发与ApplicationDomain
2009-12-25 13:22 2740AS3应用程序模块化开发 ... -
用Flex的编译参数实现AS3程序的自身预加载(Self Preloading)
2009-12-17 19:03 1803http://www.riaidea.com/blog/arc ... -
as3运行时加载字体
2009-12-16 11:20 1681http://nochump.com/blog/?p=20。还 ... -
minibuilder 启动命令
2009-12-03 03:50 704http://code.google.com/p/minibu ... -
AS3 Alert
2009-12-02 16:37 1525package { import flash.displ ... -
最新火爆游戏巨献——谈Flash Player的安全机制
2009-11-23 16:30 723最新火爆游戏巨献——谈Flash Player的安全机制 ... -
as3编译器错误中文说明
2009-11-19 13:38 1259http://www.eb163.com/club/threa ... -
aswing进度条改变显示进度条方式
2009-11-11 16:53 1024package org.aswing.plaf.basic.b ... -
aswing布局管理器
2009-11-11 02:23 1841http://hereson.iteye.com/blog/1 ... -
as绘制渐变颜色皮肤
2009-11-10 13:57 918这段代码画了一个球型 var myMatrix:Matrix ...
相关推荐
阻止事件冒泡的方法主要有两种:`event.stopPropagation()` 和 `event.stopImmediatePropagation()`。这两种方法在不同的场景下有不同的应用。 1. `event.stopPropagation()` 这个方法可以阻止事件继续在DOM树中...
这可以通过在事件处理函数中使用`event.stopPropagation()`来阻止事件继续冒泡,或者使用`event.stopImmediatePropagation()`来立即停止所有后续的事件处理。 总之,理解JavaScript中的事件冒泡机制对于编写高效的...
3. 这个过程会一直持续,直到事件到达文档的根节点,或者被某个中间节点的事件处理器阻止(使用`event.stopPropagation()`方法)。 这种机制使得我们可以方便地在祖先元素上处理多个子元素的事件,而无需为每个子...
此外,`event.stopPropagation()`方法可以阻止事件继续向上冒泡,而`event.stopImmediatePropagation()`则不仅可以阻止冒泡,还能阻止同一元素上的其他事件处理函数被执行。 总结一下,JavaScript事件冒泡是浏览器...
除了`stopPropagation()`,jQuery还提供了`event.stopImmediatePropagation()`方法,它不仅阻止当前事件的冒泡,还会停止同一事件在同一元素上其他事件处理程序的执行。如果一个元素有多个相同的事件监听器,这会...
6. **事件冒泡和阻止**:`stopPropagation`方法可以阻止事件继续冒泡到父级节点,而`stopImmediatePropagation`则阻止同一事件在当前目标上触发其他监听器。 7. **事件委托**:在大型项目中,事件委托是一种优化...
为了防止事件冒泡,可以使用`event.stopPropagation()`方法,阻止事件继续向上冒泡;而`event.stopImmediatePropagation()`不仅可以阻止冒泡,还能阻止同一元素上的其他事件处理程序被执行。 在实际应用中,事件...
在阅读提供的"JQuery提供了两种方式来阻止事件冒泡.pdf"文件时,你将更深入地理解这些方法的工作原理、用法以及它们在不同场景下的最佳实践。记得结合实际代码示例进行学习,这将有助于更好地掌握这些技术。
### 阻止浏览器的默认事件和冒泡 ...通过以上介绍,我们可以了解到在实际开发中如何有效地使用JavaScript来控制和管理浏览器的默认事件以及事件的冒泡机制,从而实现更复杂的功能和更好的用户体验。
在事件捕获的阶段,同样可以在事件处理函数中调用event.stopPropagation()方法来停止事件继续向下传播,但更多情况下开发者会使用event.stopImmediatePropagation()来阻止同一层级中其他事件监听器的执行。...
为了更好地控制事件冒泡,开发者可以使用`event.stopPropagation()`方法来阻止事件继续向上冒泡,或者使用`event.stopImmediatePropagation()`防止其他在同一元素上注册的事件处理程序被执行。这些技巧在处理复杂...
在JavaScript中,事件冒泡(Event Bubbling)是一种事件处理机制,它描述的是事件从最深的DOM节点开始,然后逐级向上层节点传播事件的过程。例如,如果你点击一个按钮,该点击事件首先会在按钮元素上触发,然后依次...
在JavaScript编程语言中,`window.event`对象是一个特殊对象,它与浏览器的事件处理机制紧密相关。这个对象在大部分浏览器环境中(尤其是老版本的IE)是全局可用的,提供了当前事件的相关信息。本文将深入探讨`...
例如,如果你想阻止事件冒泡但不阻止其默认行为,使用`stopPropagation()`;如果你还需要阻止同一元素上其他处理函数的执行,那么`stopImmediatePropagation()`更为合适。 测试示例(test.html): ```html <!...
如果你想完全取消事件的处理,应该使用`event.stopImmediatePropagation()`,这样可以防止当前元素上其他监听相同事件的处理函数被执行。 了解并熟练运用`event.stopPropagation()`对于编写高性能、低耦合的...
总结来说,在JQuery中处理DOM事件冒泡时,要熟悉事件对象的使用、stopPropagation()方法来停止事件冒泡、preventDefault()方法来阻止默认行为以及stopImmediatePropagation()方法来阻止事件继续传播到其他事件处理器...
5. **停止事件传播(Stopping Propagation)**:如果希望阻止事件继续向上冒泡,可以使用`event.stopPropagation()`。 6. **自定义事件(Custom Events)**:除了浏览器提供的内置事件,我们还可以通过`new Event`...
本篇文章将深入探讨JS的Event事件对象的使用方法。 首先,我们来分析提供的代码片段: ```javascript function getEvent(event) { var ev = event || window.event; if (!ev) { var c = this.getEvent.caller; ...
也可以通过`event.stopPropagation()`阻止事件冒泡,或者`event.stopImmediatePropagation()`阻止同一事件链上的其他监听器执行。 总结来说,Vue 3的事件系统提供了一套强大的工具,让我们能够优雅地处理组件间的...
Flex遵循AS3(ActionScript 3)的事件模型,其中事件分为三个阶段:捕获阶段、目标阶段和冒泡阶段。事件从最外层的根节点开始传播,依次经过每个节点直到目标节点,然后反向传播回根节点。这种模型允许在不同层次的...