Я не понимаю разницы, они оба кажутся одинаковыми, но я думаю, что нет.
Любые примеры того, когда использовать тот или иной будет приветствоваться.
Я не понимаю разницы, они оба кажутся одинаковыми, но я думаю, что нет.
Любые примеры того, когда использовать тот или иной будет приветствоваться.
Ответы:
Бен совершенно прав в своем ответе - так что имейте в виду то, что он говорит. То , что я собираюсь сказать вам , это не полное объяснение, но это очень простой способ запомнить , как e.target
, e.currentTarget
работу в связи с событиями мышей и список отображения:
e.target
= Вещь под мышкой (как говорит Бен ... вещь, которая запускает событие).
e.currentTarget
= Вещь перед точкой ... (см. Ниже)
Так что если у вас есть 10 кнопок внутри клипа с именем экземпляра «btns», и вы делаете:
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".
Стоит отметить, что если вы изменили MouseEvent на ROLL_OVER или установили для свойства btns.mouseChildren
значение false, e.target
и e.currentTarget
оба всегда будут иметь значение «btns».
currentTarget
объект всегда слушает событие; target
фактическая цель, которая получила событие. Для каждого всплывающего события, цель получает событие и всплывает список отображения. (Или наоборот для захвата событий)
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);
И инициировать другое действие в doAction (событие) в зависимости от event.target (используя его свойство name и т. Д.)
сделать пример:
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, и в этом прослушивателе вы можете написать следующий код, чтобы Canvas не перетаскивался.
function dragImageOnly(e:MouseEvent):void
{
if(e.target==e.currentTarget)
{
return;
}
else
{
Image(e.target).startDrag();
}
}
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.
Если вы щелкнете по дочернему элементу кнопки, лучше использовать currentTarget для обнаружения атрибутов кнопок, в CH иногда бывает сложно использовать e.target.
e.currentTarget - это элемент (родитель), где регистрируется событие, e.target - это узел (потомки), на который указывает событие.