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

时间:2014-10-15 10:59:08

标签: javascript html html5

我正在制作一个HTML游戏,其中我必须调用跳转和步行功能,以便使用键盘键分别跳跃和行走。但我无法这样做!! 这是我的代码:

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

即与' w'关键是它必须跳起来并且用'' d'关键它走了。!!

3 个答案:

答案 0 :(得分:2)

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可能没有按照您的预期在所有浏览器中定义,因此您可能希望如上所述防范此问题。

答案 1 :(得分:0)

尝试

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。只需检查所有它们,这取决于浏览器。

答案 2 :(得分:0)

您没有将事件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();
    }
}