2012-03-04 71 views
0

我發現了一個腳本,它可以處理輸入一個小的基於HTML5的遊戲我的建築:我的按鍵捕捉腳本在Firefox中不起作用,爲什麼?

var KEY = {W: 87, A: 65, S:83, D: 68, E: 69}; 

var input = { 
    right: false, 
    up: false, 
    left: false, 
    down: false, 
    e: false 
}; 

function press() 
{ 
    if (!ni) 
    { 
     var evt=window.event; 
     var code = evt.keyCode; 

     switch(code) 
     { 
      case KEY.W: input.up = true; break; 
      case KEY.A: input.left = true; break; 
      case KEY.S: input.down = true; break; 
      case KEY.D: input.right = true; break; 
      case KEY.E: input.e = true; break; 
     } 
    } 
} 

function release() 
{ 
    if (!ni) 
    { 
     evt=window.event; 
     var code = evt.keyCode; 
     input.code = code; 

     switch(code) 
     { 
      case KEY.W: input.up = false; break; 
      case KEY.A: input.left = false; break; 
      case KEY.S: input.down = false; break; 
      case KEY.D: input.right = false; break;   
      case KEY.E: input.e = false; break; 
     } 
    } 
} 

這是事件處理程序是如何分配的:

document.addEventListener("keydown", press); 
document.addEventListener("keyup", release); 

變量ni顯示了當玩家在文本框中輸入文本時,偶爾會發生這種情況,我敢肯定,這不會導致問題。此外,這在Chrome中完美工作,但正如我所說,在Firefox中不起作用。有人在乎解釋爲什麼? Firefox版本:10.0.2.4428。

回答

3

非標準window.event對象僅在IE和Chrome中可用。

在符合標準的瀏覽器中,event對象作爲第一個參數傳遞給事件偵聽器。

變化:

function press() { 
    if (!ni) { 
     var evt=window.event; 

到:

function press(evt) {    // <-- Declaration of evt 
    if (!ni) { 
     evt = evt || window.event; // <-- Notice: var is omitted 

等價的:

function release(evt) { 
+0

這工作,謝謝! – corazza 2012-03-04 22:48:51

-1

在Firefox中,你需要使用e.which而不是e.keyCode

你可以把它兼容:

VAR的keyCode = e.which || w.keyCode;

+0

對不起,不起作用。 – corazza 2012-03-04 22:45:52

相關問題