javascript - 无法删除事件监听器

标签 javascript canvas

我在所选函数内创建了事件监听器,但无法在“win”函数中将其删除。 (choose函数是在setInterval中实现的,但只有在调用clearInterval之后才实现) 我怎样才能删除这个事件监听器?我不希望点击后文本可以更改。

function chose() {
    canvas.onmousemove = function (event) {
        if (((ballPos == 1) & (event.clientX > posX1) & (event.clientX < posX1 + cupw) & (event.clientY > posY) & (event.clientY < posY + cuph)) |
            ((ballPos == 2) & (event.clientX > posX2) & (event.clientX < posX2 + cupw) & (event.clientY > posY) & (event.clientY < posY + cuph)) |
            ((ballPos == 3) & (event.clientX > posX3) & (event.clientX < posX3 + cupw) & (event.clientY > posY) & (event.clientY < posY + cuph)))
            win = true;

        else
            win = false;
        canvas.addEventListener('click', function () {
            winpage(win);
        }, false);
    }

}

function winpage(win) {
    canvas.removeEventListener('click', function () {
        winpage(win);
    }, false);
    context.clearRect(0, 0, w, h);
    context.drawImage(backGround, 0, 0, w, h);
    if (win)
        context.fillText("YOU WIN!!!", w / 2, h / 2);
    else
        context.fillText("YOU LOSE!!!", w / 2, h / 2);
}

最佳答案

它必须是完全相同的函数。

var handler = function () {
        winpage(win);
    };
function chose() {
    canvas.onmousemove = function (event) {
        if (((ballPos == 1) & (event.clientX > posX1) & (event.clientX < posX1 + cupw) & (event.clientY > posY) & (event.clientY < posY + cuph)) |
            ((ballPos == 2) & (event.clientX > posX2) & (event.clientX < posX2 + cupw) & (event.clientY > posY) & (event.clientY < posY + cuph)) |
            ((ballPos == 3) & (event.clientX > posX3) & (event.clientX < posX3 + cupw) & (event.clientY > posY) & (event.clientY < posY + cuph)))
            win = true;

        else
            win = false;
        canvas.addEventListener('click', handler, false);
    }

}

function winpage(win) {
    canvas.removeEventListener('click', handler, false);
    context.clearRect(0, 0, w, h);
    context.drawImage(backGround, 0, 0, w, h);
    if (win)
        context.fillText("YOU WIN!!!", w / 2, h / 2);
    else
        context.fillText("YOU LOSE!!!", w / 2, h / 2);
}

关于javascript - 无法删除事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20678689/

相关文章:

javascript - 如何从一个数组中获取数据,随机选取一半而不选择同一张卡两次,然后将它们移动到另一个数组?

javascript - 如何在主页后显示图像

javascript - 如何更改 extJS 中的 afterSubTpl 标记字段颜色

javascript - HTML5 Canvas,更好的像素控制和更快的速度

javascript - jQuery 事件处理程序不工作

javascript - HTML 5 Canvas : Uploaded image colour picker

Android - 创建老虎机动画的技巧

应用于 Canvas 的 CSS3 自定义过滤器 - 仅在满足奇怪条件时工作

javascript - 多平台 HTML5 游戏 DOM+CSS vs CANVAS vs 两者

javascript - 如何使用按钮在 div 之间切换?