如何取消绑定 onClick 事件处理程序,直到需要它?



我在 JavaScript 中遇到游戏问题。

我的游戏位于画布中,我大量使用功能,几乎可以像:

document.onmousemove = function(event) {
    var mouseX = event.clientX - canvas.getBoundingClientRect().left;
    var mouseY = event.clientY - canvas.getBoundingClientRect().top;
    //mouse position is relative to player position
    mouseX -= CANVAS_WIDTH/2;
    mouseY -= CANVAS_HEIGHT/2;
    player.aimAngle = Math.atan2(mouseY, mouseX) / Math.PI * 180;
}
document.onclick = function(event) {
 if(player.canAttack && player.distance >= 80) {        //not for sword attack
     performAttack(player);
     player.canAttack = false;
 }
 if(player.distance < 80)
     performAttack(player);

 event.preventDefault();
}

但是在动态创建画布之前,我有一个登录表单。当我用鼠标单击以选择那些表单时,我在控制台中出现错误未捕获的类型错误:无法读取未定义的属性"canAttack"。那是因为我还没有调用 Player(( 构造函数,所以 canAttack 不存在,并且 onMouseMove 画布还不存在。

如何"禁用"或取消绑定 document.onclick 和 document.onmousemove?如果它们使用 addEventListener 完成,我会使用 removeEventListener 禁用它们。我该怎么用document.onclick代替?

谢谢

当必须删除侦听器时尝试关注

function noop(){}
document.onclick = noop // when have to remove click binding

最新更新