无法通过键盘事件执行功能

Unable to execute functions through keyboard events

本文关键字:事件 执行 功能 键盘      更新时间:2023-09-26

我正在制作一个HTML游戏,在这个游戏中,我必须调用jump和walk函数,以便使用键盘键分别使角色跳跃和行走。但是我做不到!!这是我的代码:

document.getElementById('myCanvas').onkeypress = function()  { 
        decision();
}
function decision(e){
        if (e.keyCode == 87) {
         jump();    
        }
        if(e.keyCode == 68) {
         walk();
        }
    }

也就是说,用"w"键它必须跳跃,用"d"键它可以行走。!!

function decision(e){
   var keyCode = e.keyCode || e.charCode;
   if (keyCode === 87) {
      jump();    
   }
   if(keyCode === 68) {
      walk();
   }
}
document.getElementById('myCanvas').onkeypress = decision;

你没有把e参数传递给回调,所以我很惊讶它没有被炸成未定义的。

还请注意,我如何将decision函数引用直接分配给onkeypress属性,而不是将其封装在匿名函数中。这将根据需要使用预期的Window上下文直接传递参数(尽管根据回调中特定的this要求,这种方法可能并不总是合适的)。

此外,请确保在确定元素可用后,只按id查询元素(即,将此代码放在目标节点出现在DOM中之后的某个位置,或使用jQuery等框架)

最后,e.keyCode可能并不像您在所有浏览器中所期望的那样定义,因此您可能需要如上所述防止这种情况的发生。

尝试

document.getElementById('myCanvas').onkeypress = function(e)  { 
    decision(e);
}
function decision(e){
    if (e.which == 87) {
     jump();    
    }
    if(e.which == 68) {
     walk();
    }
}

还要记住,您可以使用e.whiche.keyCodee.charCode。只需检查所有这些,这取决于浏览器。

您没有将事件e传递给decision()函数

document.getElementById('myCanvas').onkeypress = function(e) { 
    decision(e);
}
function decision(e){
    var key = e.keyCode ? e.keyCode : e.which;
    if (key == 87) {
        jump(); 
    }
    if(key == 68) {
        walk();
    }
}