Zdarzenie mousemove działa i wywołujeMouseMove za każdym razem, gdy poruszam się po płótnie. Mimo że zdarzenia keydown i keyup nigdy nie działają. Klikam na płótno i uderzam w klawisze, ale żadne zdarzenie nie jest wyzwalane. Czy ktoś wie, dlaczego te wydarzenia nie działają? Dziękuję za radę! Podążam za kursem html5 z udacity, jeśli ktoś jest ciekawy skąd pochodzi kod.JavaScript "keydown" detektor zdarzeń nie działa
InputEngineClass = Class.extend({
keyState: new Array(),
setup: function() {
document.getElementById("gameCanvas").addEventListener('mousemove', gInputEngine.onMouseMove);
document.getElementById("gameCanvas").addEventListener('keydown', gInputEngine.onKeyDown);
document.getElementById("gameCanvas").addEventListener('keyup', gInputEngine.onKeyUp);
},
onMouseMove: function (event) {
console.log("Called onMouseMove");
var posx = event.clientX;
var posy = event.clientY;
},
onKeyDown: function (event) {
console.log("KEY DOWN!!!");
keyState[event.keyID] = true;
gInputEngine.update();
},
onKeyUp: function (event) {
console.log("KEY UP!!!");
keyState[event.keyID] = true;
},
update: function() {
KeyW = 87;
if(gInputEngine.keyState[KeyW]) console.log("FORWARD!!!");
}
});
gInputEngine = new InputEngineClass();
Jaki typ obiektu jest 'gameCanvas'? Jeśli nigdy nie uzyska fokusu na klawiaturze (lub ma dzieci, które skupiają się na fokusie), to nie dostanie zdarzeń na klawiaturze. Obiekt musi najpierw uzyskać ostrość klawiatury przed wysłaniem do niej zdarzeń klawiatury. – jfriend00
jest płótno utworzony w następujący sposób: 'ciało = document.getElementById ("korpus");' 'płótno = document.createElement ("płótno");' 'canvas.setAttribute ("id"," gameCanvas ");' 'canvas.width = window.innerWidth;' 'canvas.height = window.innerHeight;' 'body.appendChild; (canvas);' – user1668814
Dziękuję @ jfriend00. Wyjaśniłem ostrość na klawiaturze i stwierdziłem, że potrzebne, aby dodać to do moich płótnie: 'canvas.setAttribute ("tabindex", 0);' – user1668814