javascript - addEventListener 在 CreateJS 中不起作用

标签 javascript html events keyboard-events

我一直在学习CreateJS,当我进入必须添加事件监听器的部分时,它就是行不通。我放入 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 正在被调用。我把它放在this中,当body加载时调用:

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

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

顺便说一下,如果我把它放在上面,它似乎可以工作

document.addEventListener

而不是

window.addEventListener

虽然我使用的书使用了后者。这是有原因的吗?如果我继续使用前者,会对我产生负面影响吗?

最佳答案

在您的情况下,应该没有特别的理由选择 window.addEventListener 而不是 document.addEventListener,反之亦然,因为两者都应该产生相同的事件对象(例如,在您的案例),并且在我测试您的代码时这样做了。

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

您会注意到“该事件将在窗口对象之前触发文档对象,因为它在层次结构中首先发生,但这种差异通常并不重要,因此您可以选择其中一个”。因此,如果您继续使用 document.addEventListener,它不会对您产生负面影响。

请注意(也来自链接的问题):“由于“单击”事件在文档和窗口中都可用,并且如果我们在文档和窗口上注册事件,则文档的单击处理程序首先触发,然后是窗口。所以对于这种观点选择文件比较好。”简而言之,从性能 Angular 来看,使用 document.addEventListener 会稍微好一些。

关于javascript - addEventListener 在 CreateJS 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23680381/

相关文章:

javascript - 日期选择器 CSS 加载不正确

javascript - 在下拉选择菜单中获取所有值?

javascript - CSS 样式因媒体查询而被划掉?

javascript - 我可以如何操作用户编辑输入字段后显示的字符

javascript - Reactjs 如何检测页面已重新加载?

javascript - 使用多个相同的下拉列表 ID,但第二个下拉列表之后不会触发 onchange 事件

java - 具有优先级的 sortOn 函数

html - 左对齐和中对齐都在同一类中

jquery - 使用 Jquery 将多个 DOM 元素附加到一个事件处理程序的最短方法?

multithreading - SetEvent是原子的吗?