Actionscript 3 e.target和e.currentTarget之间的差异

Actionscript 3 e.target和e.currentTarget之间的差异,actionscript-3,events,event-handling,Actionscript 3,Events,Event Handling,我不明白有什么不同,他们看起来都一样,但我想他们不是 任何关于何时使用一个或另一个的示例都将不胜感激。e.target是触发事件分派器的对象,而e.currentTarget是您分配给侦听器的对象 本的回答完全正确,所以记住他说的话。我要告诉你的不是一个完整的解释,但这是一个非常容易记住e.target,e.currentTarget如何与鼠标事件和显示列表相关的方法: e.target=鼠标下的东西(如本所说……触发事件的东西)。 e.currentTarget=点之前的东西。。。(见下文)

我不明白有什么不同,他们看起来都一样,但我想他们不是


任何关于何时使用一个或另一个的示例都将不胜感激。

e.target
是触发事件分派器的对象,而
e.currentTarget
是您分配给侦听器的对象

本的回答完全正确,所以记住他说的话。我要告诉你的不是一个完整的解释,但这是一个非常容易记住
e.target
e.currentTarget
如何与鼠标事件和显示列表相关的方法:

e.target
=鼠标下的东西(如本所说……触发事件的东西)。
e.currentTarget
=点之前的东西。。。(见下文)

因此,如果您在一个实例名为“BTN”的剪辑中有10个按钮,您可以:

btns.addEventListener(MouseEvent.MOUSE_OVER, onOver);
// btns = the thing before the dot of an addEventListener call
function onOver(e:MouseEvent):void{
  trace(e.target.name, e.currentTarget.name);
}
e.target
将是10个按钮之一,
e.currentTarget
将始终是“BTN”剪辑


值得注意的是,如果您将MouseEvent更改为滚动,或者将属性
btns.mouseChildren
设置为false,
e.target
e.currentTarget
都将始终为“btns”。

值得注意的是,event.target可能非常有用,例如,用于使用单个侦听器触发不同的操作。假设你有一个典型的“菜单”精灵,里面有10个按钮,所以不要这样做:

menu.button1.addEventListener(MouseEvent.CLICK, doAction1);
menu.button2.addEventListener(MouseEvent.CLICK, doAction2);
etc...
您可以简单地执行以下操作:

menu.addEventListener(MouseEvent.CLICK, doAction);

并根据event.target(使用其name属性等)在doAction(event)中触发不同的操作。

e.currentTarget将始终返回添加了事件侦听器的组件

另一方面,e.target可以是组件本身,也可以是接收事件的任何直接子女、孙子或孙子等。换句话说,e.target返回位于显示列表层次结构顶部的组件,并且必须位于子层次结构或组件本身中

一种用法是当画布中有多个图像,并且希望将图像拖动到组件内部而不是画布中时。您可以在画布上添加一个侦听器,并在该侦听器中编写以下代码以确保画布不会被拖动

function dragImageOnly(e:MouseEvent):void
{
    if(e.target==e.currentTarget)
    {
        return;
     }
     else
     {
        Image(e.target).startDrag();
     }
}
举个例子:

var body = document.body,
    btn = document.getElementById( 'id' );
body.addEventListener( 'click', function( event ) {
    console.log( event.currentTarget === body );
    console.log( event.target === btn );
}, false );

当您点击“btn”时,将显示“真”和“真”

e.currentTarget
始终是事件实际绑定到的元素
e.target
是事件起源的元素,因此
e.target
可能是
e.currentTarget
的子元素,或者
e.target
可能是===
e.currentTarget
,具体取决于标记的结构。

  • e、 目标是元素,您可以单击该元素
  • e、 currentTarget是添加了事件侦听器的元素

如果您单击按钮的子元素,最好使用currentTarget来检测按钮属性,因为使用e.target有时会有问题。

我喜欢直观的答案

当您单击
#btn
时,将调用两个事件处理程序,它们将输出您在图片中看到的内容


此处演示:

e.currentTarget是注册事件的元素(父元素),e.target是事件指向的节点(子节点)。

因此,换句话说,target是子节点,currentTarget是容器。不,
currentTarget始终是侦听事件的对象<代码>目标
是接收事件的实际目标。每次事件冒泡时,目标接收事件并在显示列表中冒泡。(或者反过来用于事件捕获)如果是一个子系统调度了事件,那么yes目标就是子系统。通常,您会希望使用e.currentTarget,因为这是您分配给侦听器的。但是,在上面列出的一个Zevan中,您希望容器上有一个侦听器和多个子容器,然后使用e.target查看哪个子容器调度了事件。上面@poke的注释是最佳答案“currentTarget始终是侦听的对象,target是接收事件的实际目标”问题是关于AS3而不是JS。啊,好吧,很抱歉标记。不过,答案仍然适用于这两种情况。下面是一个很好的例子:这非常清楚地显示了差异。是否有人对ActionScript3非常了解,足以确认其事件的行为与DOM事件相同?JavaScript等效:Murhaf Sousli提供的参考是一个清晰的解释,回答了差异是什么的问题。这把小提琴的简化版是最好的答案。
target  is the element that triggered the event (e.g., the user clicked on)

currenttarget is the element that the event listener is attached to.