나는 그 차이를 이해하지 못한다. 둘 다 동일하게 보이지만 그렇지 않다고 생각한다.
어느 쪽을 사용할 것인지에 대한 모든 예가 이해 될 것이다.
답변
벤은 자신의 대답이 완전히 정확하므로 자신이 말하는 것을 명심하십시오. 내가 당신에게에 대해이야하는 것은 자세한 설명은 아니지만, 어떻게 기억하는 아주 쉬운 방법 e.target
, e.currentTarget
작업 마우스 이벤트 및 표시 목록과 관련을 :
e.target
= 마우스 아래에있는 것 (벤이 말한 것처럼 … 이벤트를 유발하는 것).
e.currentTarget
= 점 앞에있는 것 … (아래 참조)
따라서 인스턴스 이름이 “btns”인 클립 안에 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
항상 “btns”클립이됩니다.
그것의 가치가 지적 당신은 ROLL_OVER로 된 MouseEvent를 변경하거나 속성을 설정하면 btns.mouseChildren
false로, e.target
그리고 e.currentTarget
모두 항상 “btns”입니다.
답변
e.target
이벤트 디스패처가 트리거되도록 트리거하고 e.currentTarget
리스너를 할당 한 것입니다.
답변
e.currentTarget
항상 이벤트가 실제로 바인딩 된 요소입니다. e.target
은 이벤트가 시작된 요소이므로 마크 업의 구조에 따라 e.target
의 하위 요소 e.currentTarget
이거나 e.target
=== e.currentTarget
일 수 있습니다 .
답변
나는 시각적 인 답변을 좋아합니다.
를 클릭 #btn
하면 두 개의 이벤트 핸들러가 호출되고 그림에 표시된 것을 출력합니다.
여기 데모 : https://jsfiddle.net/ujhe1key/
답변
예를 들어, 단일 리스너를 사용하여 다른 작업을 트리거하는 경우 event.target이 유용 할 수 있습니다. 내부에 10 개의 버튼이있는 일반적인 “메뉴”스프라이트가 있다고 가정 해 봅시다.
menu.button1.addEventListener(MouseEvent.CLICK, doAction1);
menu.button2.addEventListener(MouseEvent.CLICK, doAction2);
etc...
간단하게 할 수 있습니다 :
menu.addEventListener(MouseEvent.CLICK, doAction);
그리고 event.target (이름 속성 등을 사용하여)에 따라 doAction (event) 내에서 다른 작업을 트리거하십시오.
답변
예를 들어 보자.
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’을 클릭하면 ‘true’와 ‘true’가 나타납니다!
답변
e.currentTarget은 항상 이벤트 리스너가 추가 된 구성 요소를 반환합니다.
반면, e.target은 구성 요소 자체 또는 직계 자녀 또는 손자 또는 손자 손자 등이 될 수 있습니다. 즉, e.target은 표시 목록 계층 구조에서 최상위에 있으며 하위 계층 구조 나 구성 요소 자체에 있어야하는 구성 요소를 반환합니다.
Canvas에 여러 이미지가 있고 구성 요소 내에서 이미지를 끌어다 놓을 때 한 가지 용도가 있습니다. Canvas에 리스너를 추가 할 수 있으며 해당 리스너에 Canvas가 드래그되지 않도록 다음 코드를 작성할 수 있습니다.
function dragImageOnly(e:MouseEvent):void
{
if(e.target==e.currentTarget)
{
return;
}
else
{
Image(e.target).startDrag();
}
}