addEventListener在CreateJS中不起作用

时间:2014-05-15 13:56:03

标签: javascript html5 events keyboard-events

我一直在学习CreateJS,当我去这个必须添加eventlistener的部分时,它就无法工作了。我放在addKey()和removeKey()中的消息不会显示出来。

function startGame() {
    window.addEventListener("keydown", addKey, false);
    window.addEventListener("keyup", removeKey, false);
    console.log("added listeners");

    createjs.Ticker.setFPS(60);
    createjs.Ticker.addEventListener("tick", tick);
}

function addKey(e) {
    console.log("RUN!");
    e = !e ? window.event : e;
    var index = KEYS_ALLOWED.indexOf(e.keyCode);
    if (true) {
        keysPressed.push(e.keyCode);
    }
}

function removeKey(e) {
    console.log("RUN!");
    e = !e ? window.event : e;
    var index = keysPressed.indexOf(e.keyCode);
    if (index > -1) {
        keysPressed.splice(index, 1);
    }
}
编辑:是的,startGame被调用了。我把它放在这个,当身体加载时调用:

function init() {
        canvas = document.getElementById("canvas");
        stage = new createjs.Stage(canvas);
        console.log("created stage");

        createAssets();
        placeAssets();
        startGame();
}

顺便说一下,如果我把它放在

上似乎有效

document.addEventListener

而不是

window.addEventListener

虽然我使用的书使用了后者。是否有这样的理由,如果我只是使用前者按下它会对我产生负面影响吗?

1 个答案:

答案 0 :(得分:0)

在您的情况下,应该没有特别的理由更喜欢window.addEventListener而不是document.addEventListener,反之亦然,因为两者都应该生成相同的事件对象(在您的情况下为e),并在我测试您的代码时这样做

使用此处的答案作为参考:Difference between document.addEventListener and window.addEventListener?

您会注意到“事件将在窗口对象之前点击文档对象,因为它首先出现在层次结构中,但这种差异通常是无关紧要的,因此您可以选择”。因此,如果继续使用document.addEventListener,它不会对您产生负面影响。

请注意(也来自链接的问题):“因为'click'事件在文档和窗口中都可用,如果我们在文档和窗口上都注册了事件,那么文档的点击处理程序会先触发窗口。所以对于这种观点选择文件更好。“简而言之,在性能方面,与document.addEventListener一起使用会稍好一些。