`

AS3事件中target和currentTarget的区别

 
阅读更多

在事件处理过程中,会自动生成事件类的实例,并传给侦听器函数。通过这个参数就可以使用事件类的属性和方法。其中target与currentTarget属性是两个很相似的属性。
 对于简单的事件处理过程,分清target与currentTarget并没有必要。因为它们一般指向同一个对象。例如,舞台中有一个实例名为mc的影片剪辑实例,通过下面的代码为这个实例注册单击事件。

mc.addEventListener(MouseEvent.CLICK,this.test);
function test(e:MouseEvent)
{
trace(e.target.name,e.currentTarget.name);
}
 输出结果是一样的,target与currentTarget属性都是引用舞台中的影片剪辑实例。但在一个相对复杂的显示列表中,这两个属性是不相同的。
 下面通过例子来了解target与currentTarget属性的异同
1、新建Flash文档
2、改图层1名为as,单击图层的第1帧,打开动作面板,输入代码: var sp1:Sprite=new Sprite() ;
var sp2:Sprite=new Sprite() ;

this.addChild(sp1) ;
sp1.addChild(sp2) ;

drawRect(sp1,0xff0000,200) ;
drawRect(sp2,0x0000FF,100);

//绘制矩形
function drawRect(obj:DisplayObject,c:uint,l:int):void;
{
obj.graphics.beginFill(c) ;
obj.graphics.drawRect(0,0,l,l) ;
}
上面的代码在主时间轴中创建了Sprite类的实例sp1,在sp1实例内又创建了Sprite类的实例sp2。如果为父级sp1注册一个单击事件侦听 器,当单击sp1时,target与currentTarget都指向sp1,当单击sp2时,target指向sp2,而currentTarget指 向sp1。因此在很多应用中,一般认为currentTarget指向父级。代码如下: sp1.name=”sp1″;
sp2.name=”sp2″;
sp1.addEventListener(MouseEvent.CLICK,clickFunc);

function clickFunc(e:MouseEvent):void
{
trace(e.target.name,e.currentTarget.name);

}
3、测试影片,分别单击大小矩形,查看信息
 如果为子级和父级都注册一个侦听器,那target属性是指单击的目标,而currentTarget属性是指在处理的事件即活动目标,因为3.0的事 件处理有捕获、目标、冒泡3个阶段,并且默认时采用冒泡机制,当单击子级时,currentTarget属性应先指向目标,并向上冒泡,就是先指向 sp2,再指向sp1。
 为程序增加sp2注册事件侦听器: sp1.addEventListener(MouseEvent.CLICK,clickFunc);
sp2.addEventListener(MouseEvent.CLICK,clickFunc);
function clickFunc(e:MouseEvent):void
{
trace(e.target.name,e.currentTarget.name);
}
因此,currentTarget属性应具备两个条件,一是它注册了侦听器,二是正在处理事件,而target属性就指事件流中的目标,例如,单击了sp2,不管事件如何冒泡或说不管currentTarget指向谁,target都指向sp2。
 target属性在事件流的目标阶段,而currentTarget属性在事件流的冒泡阶段、目标阶段和捕获阶段。以单击事件为例,只有事件流处于目标 阶段时,currentTarget属性与target属性的指向才相同,当事件流处于冒泡阶段和捕获阶段时,target属性总是指向被单击的对象,而 currentTarget属性指向当前事件活动的对象。
 即使在没有发生事件流的处理时,有时也需区别target和currentTarget属性,比如在舞台中创建mc1,在mc1中又创建mc2,且mc2位于mc1的上面。
 当对父级对象即mc1处理事件时,使用下面的代码1: mc1.addEventListener(MouseEvent.CLICK,fun)
function fun(e:MouseEvent)
{
trace(e.target.name)
}
测试影片时,单击mc1,输出mc1,单击mc2,则输出mc2。如果要使用e.target属性始终指向mc1,可以使用容器对象的mouseChildren属性:

mc1.mouseChildren = false;

 当mc1的mouseChildren属性被设置成 false后,mc1的子级对象将不能处理鼠标事件,此时不管单击mc1还是mc2输出的都是mc1。代码2: mc1.mouseChildren=false
mc1.addEventListener(MouseEvent.CLICK,fun)
function fun(e:MouseEvent)
{
trace(e.target.name)
}
由于currentTarget属性指向当前事件活动的对象,而mc1注册了单击事件,mc2没有注册单击事件,即mc1的事件是活动的。因此不管单击mc1还是mc2,currentTarget属性肯定指向mc1。
代码3; mc1.addEventListener(MouseEvent.CLICK,fun)
function fun(e:MouseEvent)
{
trace(e.currentTarget.name)
}

分享到:
评论

相关推荐

    as3事件属性

    在AS3中,事件流主要分为三个阶段:捕获阶段(CAPTURING PHASE)、目标阶段(AT TARGET PHASE)和冒泡阶段(BUBBLING PHASE)。当一个事件被触发时,它首先经历捕获阶段,然后到达目标对象阶段,最后在目标对象的父级之间...

    AS3移动端多点触摸带例子

    首先,AS3中的多点触摸支持依赖于Adobe AIR(Adobe Integrated Runtime),这是一个可以让开发者使用Flash技术构建桌面和移动应用的平台。在移动端,AIR提供了对多点触摸事件的原生支持,如`TouchEvent`类,它包含了...

    event.currentTarget与event.target的区别介绍

    event.currentTarget identifies the current target for the event, as the event traverses the DOM. It always refers to the element the event handler has been attached to as opposed to event.target which...

    as3加载xml实例

    在AS3中,我们可以使用`URLLoader`类加载XML文件,然后通过`Event.COMPLETE`事件监听加载完成。以下是一个简单的示例: ```actionscript var urlLoader:URLLoader = new URLLoader(); var xmlRequest:URLRequest = ...

    flash ActionScript.3面试题3

    AS3中的事件模型允许对象之间通信,事件触发后会沿着事件流传递。`target`属性表示触发事件的对象,而`currentTarget`属性表示当前正在处理事件的对象。 以上知识点涵盖了ActionScript 3.0在MVC模式、数据库交互、...

    深入浅出讲解flex中的事件机制

    通过上述示例,我们可以清楚地看到Flex中事件机制的基本原理及其在实际应用中的作用。理解`target`、`currentTarget`以及`useCapture`的概念对于开发高效、健壮的Flex应用程序至关重要。此外,合理利用事件传播的...

    javascript currentTarget对象介绍

    在JavaScript的事件处理机制中,`currentTarget` 是一个非常重要的概念,尤其在事件委托(Event Delegation)和事件冒泡(Event Bubbling)的过程中扮演着关键角色。本文将从多个角度对 `currentTarget` 进行深入...

    as3+xml实现的网站菜单

    在AS3中,我们可以利用XML文件作为数据源,动态地构建和更新网站的交互式菜单。这样做的优点在于,非编程背景的人员也能通过编辑XML文件来调整菜单内容,而无需接触代码。 首先,我们需要创建一个XML文件,如`...

    flashas3.0的一些基础源码实例包括填空题选择题拖拽题的fla

    在`drop`事件中,通过`event.target`和`event.currentTarget.dropTarget`来确定拖动元素是否已放置在正确的目标上,从而执行相应的反馈或评分逻辑。 在实际开发这些交互式练习时,AS3.0还涉及到了其他一些关键概念...

    flex事件机制分析

    事件对象通过`type`属性标识事件类型,`target`属性指明事件发生的对象,而`currentTarget`属性则表示当前处理事件的组件。 4. 自定义事件 Flex允许开发人员自定义事件,以满足特定需求。创建自定义事件通常需要...

    event.currentTarget和document.activeElement用法

    firefox 的 event.currentTarget 和 ie 的 document.activeElement 这两个完全含义不一致的对象却被捆绑在一起做成了浏览器兼容代码。 大家在google搜索的时候 都会发现 document.activeElement || event....

    Flex试题 .txt

    currentTarget和target的区别是什么? currentTarget指的是触发事件的实际DOM元素,而target则指向最初触发事件的对象。在事件冒泡过程中,currentTarget会改变,而target始终不变。 ### 13. 解释Flex中动画效果...

    flash cs6鼠标跟随时间方块

    4. **更新对象位置**:在`mouseMoveHandler`函数内,我们可以通过`event.target`或`event.currentTarget`获取到触发事件的对象,并更新其坐标以匹配鼠标的位置。例如,如果对象名为`my_mc`: ```actionscript my_mc...

    Javascript拖拽拖放系列文章3之细说事件对象第1/4页

    本文主要探讨的是在拖拽和拖放操作中事件对象的应用,特别是其属性和方法,这对于实现交互式的网页功能至关重要。 首先,我们要了解`Button`属性。这个属性是Integer类型的,既可以读也可以写,特别是在处理鼠标...

    FLEX面试题

    9. **事件目标(target)与当前目标(currentTarget)**:在事件处理过程中,`target` 属性表示最初触发事件的对象,而 `currentTarget` 表示当前正在处理该事件的对象。 10. **动画效果**:Flex提供了多种动画效果支持...

    flash学习笔记

    在 ActionScript 3 中,target 属性有时候是空的,建议用 currentTarget。如果数据类型能够使用 new 关键字创建,那么它一定是引用型数据变量。ActionScript 3.0 引入了三种特殊类型的无类型说明符:*,void 和 null...

    flex动画效果与变幻.pdf

    3. **事件处理函数**:在事件处理函数中,设置目标组件,并调用效果对象的`play()`方法来播放动画。 ```as private function onClick(event:Event):void { be.target = event.currentTarget; be.play(); } `...

    Javascript 事件冒泡机制详细介绍

    节点:" + event.target.id +" 当前节点:"+event.currentTarget.id);}$("body").on("click", "div", function(event) {console.log("div 被点击");event.stopPropagation();});$("body").on("click", "span", ...

    微信小程序实现同一页面取值的方法分析

    通过上述分析,我们可以看出在微信小程序开发中,同一页面取值需要依赖于js文件中的数据和wxml文件中的绑定机制,同时还需要理解数据绑定和事件绑定的具体使用方法。需要注意的是,上述提到的数据传递和取值方法只...

    tweenjs.min.js文件

    function Event(a,b,c){this.type=a,this.target=null,this.currentTarget=null,this.eventPhase=0,this.bubbles=!!b,this.cancelable=!!c,this.timeStamp=(new Date).getTime(),this.defaultPrevented=!1,this....

Global site tag (gtag.js) - Google Analytics