问题
bind可以指定this
通过addEventListener添加事件添加bind指定this后,就无法使用removeEventListener正常移除事件。
原因
fn.bind(xx)会返回一个新函数,也就是说 fn.bind(aa) === fn.bind(bb) 为 false。
解决
可以先把 fn.bind(xx) 返回的函数保存起来,removeEventListener的时候,移除这个保存的函数即可。
addEventListener() {
console.log("addEventListener");
// 先将bind(this)后的function保存起来
this.downHander = this._pointerdown.bind(this);
this.upHander = this._pointerup.bind(this);
this.moveHander = this._pointermove.bind(this);
//鼠标按下事件
this.renderer.domElement.addEventListener("pointerdown", this.downHander);
//鼠标松开事件
this.renderer.domElement.addEventListener("pointerup", this.upHander);
//鼠标移动事件
this.renderer.domElement.addEventListener("pointermove", this.hander3);
}
removeEventListener() {
console.log("removeEventListener");
this.renderer.domElement.removeEventListener(
"pointerdown",
this.downHander
);
this.renderer.domElement.removeEventListener("pointerup", this.upHander);
this.renderer.domElement.removeEventListener(
"pointermove",
this.moveHander
);
}
解决绑定this后移除监听问题
本文探讨了使用addEventListener绑定this后导致removeEventListener失效的问题,并提供了解决方案:通过保存bind(this)返回的函数来确保能正确移除事件。
1095

被折叠的 条评论
为什么被折叠?



