我们来做个试验,mc1里有mc2,mc2里有mc3]

mc1.mc2.addEventListener(MouseEvent.CLICK,func1,true);
mc1.mc2.addEventListener(MouseEvent.CLICK,func2);
function func1(e:MouseEvent):void{
trace(“捕获阶段”)
}
function func2(e:MouseEvent):void{
trace(“冒泡阶段”)
}

再看看AS3的帮助文档:

public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void

useCapture:Boolean (default = false) — 确定侦听器是运行于捕获阶段、目标阶段还是冒泡阶段。如果将 useCapture 设置为 true,则侦听器只在捕获阶段处理事件,而不在目标或冒泡阶段处理事件。如果 useCapture 为 false,则侦听器只在目标或冒泡阶段处理事件。要在所有三个阶段都侦听事件,请调用 addEventListener 两次:一次将 useCapture 设置为 true,一次将 useCapture 设置为 false.

结论:

as3中侦听函数在捕获阶段执行还是在冒泡阶段,是由我们在写addEventListener的时候的第三个参数控制的

默认(你不写的时候)是在冒泡阶段被执行的

============

但事件是否可以冒泡,还是由事件本身来设置:

public function Event(type:String, bubbles:Boolean = false, cancelable:Boolean = false)

参数  type:String — 事件的类型,可以作为 Event.type 访问。

bubbles:Boolean (default = false) — 确定 Event 对象是否参与事件流的冒泡阶段。默认值为 false。

cancelable:Boolean (default = false) — 确定是否可以取消 Event 对象。默认值为 false。

new Event(“MYEVENT”,true)这样这个事件才可以冒泡,所以有时候我们在一个MC中发出一个事件,在外面却收不到

就是没设置的原因

    博视界科技专注于沉浸式全景数字餐厅、全息酒店宴会厅,旨在帮传统餐饮用科技玩跨界,欢迎咨询!

官方网站:www.boseetech.com

联系方式:    

微信联系我:


    【声明】转载本文请注明出处三人行设计,并保留有效链接:as3中侦听函数在捕获阶段执行还是在冒泡阶段? http://www.srxtuan.com/archives/1142,谢谢!

猜您还喜欢: