createjs事件侦听的一个小坑
Posted 雷乌斯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了createjs事件侦听的一个小坑相关的知识,希望对你有一定的参考价值。
重复多次地add和remove之后,每次操作都变得非常卡。
进断点调试之后发现,这个显示对象上被我添加了好几万个listener。
看了一下自己写的窗口基类的代码
this.on("added", onAddToParent);
function onAddToParent(event)
//do sth. on added
_this.off("added", onAddToParent);
_this.on("removed", onRemoveFromParent);
function onRemoveFromParent(event)
//do sth. on removed
_this.on("added", onAddToParent);
_this.off("removed", onRemoveFromParent);
发现off并没有起作用,只有on在不断地添加侦听,所以每次侦听的数量都以2次方的速度增长。。。。
又去翻了一下api,发现off on 和add/removeEventListener 的用法是不一样的。
add/remove 是和as3一样
但是on/off 是创建了一个匿名函数,这个函数包住了我们传进去的侦听回调函数,然后通过调用这个匿名函数来执行回调,所以在off的地方把我们创建的回调函数当参数并没有用。要把on方法返回的参数,也就是它自己创建的匿名函数作为参数传给off才行。
也就是
warpperFunc = _this.on("added", callbackFunc);
_this.off("added", warpperFunc);
这样才能正确地移除侦听。
不过这样也太麻烦了,本来就是为了少打几个字我才用的off/on,以为这只是add/remove的简写,没想到是有区别的。看来还是老老实实用add/remove来的方便
以上是关于createjs事件侦听的一个小坑的主要内容,如果未能解决你的问题,请参考以下文章