2012-04-01 25 views
0

我的問題是,我最近開始更改我的HTML5 webapp使用全屏+指針鎖而不是在窗口中拖動鼠標。除了鼠標,該應用程序還使用鍵盤,並且以前一切正常。但是,現在我無法獲得任何類型的按鍵。指針鎖定鼠標完美工作。無法獲得keydown/keyup與指針鎖定/全屏幕

以前我聽了按鍵這樣的:

document.onkeydown = handleKeyDown; 
document.onkeyup = handleKeyUp; 

其中handleKeyDown和最多的功能,例如:

function handleKeyUp(event) { 
    doStuffWith(event.keyCode); 
} 

現在,我已經添加鍵盤監聽器旁邊的我的鼠標移動監聽器:

document.addEventListener('keyup', handleKeyUp(event), false); 
document.addEventListener('keydown', handleKeyDown(event), false); 

其中handleKey *與上面相同,但doStuffWith d沒有做任何事情。它似乎得到了一些未定義的事件,沒有別的。這可能是一個相當基本的問題,但我很難解決它。我在Google上找到的大多數示例和教程都不使用addEventListener,而是使用之前使用的舊樣式。

我非常感謝任何幫助。

編輯//一個澄清:因爲事件是不確定的,doStuffWith不會被調用可言,因爲執行試圖讀取未定義

回答

1

的主要問題.keyCode時停止的是,根據以下MDN頁面,字母數字鍵在全屏模式下禁用:

https://developer.mozilla.org/en/DOM/Using_full-screen_mode#Things_your_users_want_to_know

也有幾個問題與您的代碼。在該行

document.addEventListener('keyup', handleKeyUp(event), false); 

...你有兩個問題:第一,第二個參數需要是一個函數的引用。它實際上是對undefined的引用,因爲您正在立即調用該函數並傳遞結果而不是傳入函數。其次,在支持addEventListener的瀏覽器中,Event對象會自動傳遞到事件偵聽器函數中。因此,你想要的是:

function handleKeyUp(e) { 
    doStuffWith(e.keyCode); 
} 

document.addEventListener('keyup', handleKeyUp, false); 
+0

謝謝,我知道有這樣的事情!不幸的是,這並沒有解決問題。聽衆對於非全屏效果似乎很好,但是在全屏中,根據日誌發生的唯一關鍵事件是esc上升時,即退出全屏後。 – Asta 2012-04-02 07:22:09

+0

@Asta:好的。我對使用全屏和指針鎖定幾乎一無所知,因此我可能無法提供更多幫助,除非提供此鏈接提到在全屏模式下禁用字母數字鍵:https://developer.mozilla。 org/en/DOM/Using_full-screen_mode#Things_your_users_want_to_know – 2012-04-02 08:12:24

+0

謝謝,這就是原因!我只嘗試字母數字(因爲這是應用程序使用)。箭頭鍵工作正常。不能說我真的理解這個決定,但是,因爲大多數FPS的使用是和數字。你介意用這個信息做出答案,所以我可以接受它嗎? – Asta 2012-04-02 08:32:40