javascript事件侦听器不工作

javascript事件侦听器不工作,javascript,Javascript,我想做一个startscreen,当用户按下空格键但我的代码不起作用时,它可以启动游戏 var level1 = false var keys = []; window.addEventListener("keydown", function(e){ keys[e.keyCode] = true; }, false) window.addEventListener("keyup", function(e){ delete keys[e.keyCode]; }, false)

我想做一个startscreen,当用户按下空格键但我的代码不起作用时,它可以启动游戏

var level1 = false
var keys = [];

window.addEventListener("keydown", function(e){
    keys[e.keyCode] = true;
}, false)

window.addEventListener("keyup", function(e){
    delete keys[e.keyCode];
}, false)

context.font = "bold 35px Arial";
context.fillText("Press Space to Start", 290,300);

if(keys[32]){
        level1 = true;
    }
但当我按下空格键时,变量level1仍然为false。我已经用谷歌浏览器控制台检查过了

但当我按下空格键时,变量level1仍然为false

对。为什么会是别的呢?事件处理程序中没有任何内容正在更新它

如果要在事件发生时更新它,请在事件处理程序中更新它

可能有一个函数,用于更新要跟踪密钥状态的任何变量的状态,并从两个事件处理程序调用它:

var level1 = false
var keys = [];

window.addEventListener("keydown", function(e) {
    keys[e.keyCode] = true;
    checkKeyState();
}, false)

window.addEventListener("keyup", function(e) {
    delete keys[e.keyCode];
    checkKeyState();
}, false)

context.font = "bold 35px Arial";
context.fillText("Press Space to Start", 290, 300);

function checkKeyState() {
    if (keys[32]) {
        level1 = true;
    } else {
        level1 = false;
    }
}

请注意,
checkKeyState
也可以写入:

function checkKeyState() {
    level1 = !!keys[32];
}
…但我不想在第一个代码块中把它扔给你

但当我按下空格键时,变量level1仍然为false

对。为什么会是别的呢?事件处理程序中没有任何内容正在更新它

如果要在事件发生时更新它,请在事件处理程序中更新它

可能有一个函数,用于更新要跟踪密钥状态的任何变量的状态,并从两个事件处理程序调用它:

var level1 = false
var keys = [];

window.addEventListener("keydown", function(e) {
    keys[e.keyCode] = true;
    checkKeyState();
}, false)

window.addEventListener("keyup", function(e) {
    delete keys[e.keyCode];
    checkKeyState();
}, false)

context.font = "bold 35px Arial";
context.fillText("Press Space to Start", 290, 300);

function checkKeyState() {
    if (keys[32]) {
        level1 = true;
    } else {
        level1 = false;
    }
}

请注意,
checkKeyState
也可以写入:

function checkKeyState() {
    level1 = !!keys[32];
}

…但我不想在第一个代码块中向您抛出这个问题。

在您提供的示例代码中,检查键[32]的if语句在触发任何事件之前运行。因此,您需要将if语句的主体移动到keydown事件函数中:

window.addEventListener("keydown", function(e){
    keys[e.keyCode] = true;
    level1 = true;
}, false);

在您提供的示例代码中,检查键[32]的if语句在触发任何事件之前运行。因此,您需要将if语句的主体移动到keydown事件函数中:

window.addEventListener("keydown", function(e){
    keys[e.keyCode] = true;
    level1 = true;
}, false);

if
条件不应该在
keydown
事件监听器内吗?if条件不应该在
keydown
事件监听器内吗?为什么要投否决票?考虑到原始代码,这是一个有效的回答。为什么投反对票?给定原始代码,这是一个有效的响应。