我使用createjs的on()函数:
myObj.on("mousedown", (e)=>{
this.myObjMouseDown(e);
});
现在,我想使用off()函数删除该侦听器,我试图编写此代码:
myObj.off("mousedown", (e)=>{
this.myObjMouseDown(e);
});
但是,该代码似乎无法正常工作。
我应该怎么写才能取消活动?
注:请注意,由于单词“ this”,我需要使用箭头功能。
您必须传递对同一函数的引用-但要注意,无论如何,on
方法都会为您创建包装函数,因为它还允许您传递范围参数。 on/off
方法专门用于解决ES5中的范围问题。 (docs)
确保取消订阅的最佳方法是存储对on
函数调用的值的引用,并将其传递给off()
。
var evt = obj.on("click", () => doSomething());
// later
obj.off("click", evt);
另一种取消事件的好方法是在函数回调中将其删除:
doSomething(evt) {
// Your Code
if (condition) {
evt.remove();
}
}
最后,如果您只是要进行清理,请使用removeAllEventListeners
(docs),您可以将其传递给可选的事件类型。
obj.removeAllEventListeners("click");
Nichaolas的回答部分正确。您确实必须传递对同一函数的引用-但是on
方法无论如何都会为您创建包装函数,因为它还允许您传递范围参数。 on/off
方法专门用于解决ES5中的范围问题。 (docs)
确保取消订阅的最佳方法是存储对on
函数调用的值的引用,并将其传递给off()
。
var evt = obj.on("click", () => doSomething());
// later
obj.off("click", evt);
另一种取消事件的好方法是在函数回调中将其删除:
doSomething(evt) {
// Your Code
if (condition) {
evt.remove();
}
}
最后,如果您只是要进行清理,请使用removeAllEventListeners
(docs),您可以将其传递给可选的事件类型。
obj.removeAllEventListeners("click");