2011-01-23 12 views
3

誰かに何が起こっているのか教えてもらえますか?私のコンソールは例外を投げていません。onkeyupとonkeydownは何もキャッチしていません

function onKeyDown(){ 
        var e = event.keyCode; 

        //if (e==87 /*w*/){ 
         up = true; 
         throw('up'); 
        //} 

        if (e==65 /*a*/){ 
         left = true; 
        } 

        if (e==83 /*s*/){ 
         down = true; 
        } 

        if (e==68 /*d*/){ 
         right = true; 
        } 
       } 

       function onKeyUp(){ 
        var e = event.keyCode; 

        //if (e==87 /*w*/){ 
         up = false; 
         throw('up'); 
        //} 

        if (e==65 /*a*/){ 
         left = false; 
        } 

        if (e==83 /*s*/){ 
         down = false; 
        } 

        if (e==68 /*d*/){ 
         right = false; 
        } 
       } 

Okay, so that was the javascript, and this is the html: 

    <body> 
      <input id="ss" type="button" value="start/stop" /> 
      <div id="container" style="border:1px solid; cursor:none; width:480px; height:320px;"> 
       <canvas id="canvas" width="480" height="320" onkeyup="onKeyUp();" onkeydown="onKeydown();"> 
        Canvas not displaying. 
       </canvas> 
      </div> 
     </body> 



Edit: current code: 

window.onload = function(){ init(); };

function init(){ 
       initSettings(); 
       initImages(); 

       document.getElementById('canvas').onkeydown = function(event) { 
        var e = event.keyCode; 

        //if (e==87 /*w*/){ 
         up = true; 
         throw('up'); 
        //} 

        if (e==65 /*a*/){ 
         left = true; 
        } 

        if (e==83 /*s*/){ 
         down = true; 
        } 

        if (e==68 /*d*/){ 
         right = true; 
        } 
       } 
+2

私はその理由を知りませんが、すべてのコードでキーイベントを扱うキャンバスを見たことがあります**イベントはキャンバスではなくウィンドウに登録されています**。ここに例があります:http://html5.litten.com/make-a-maze-game-on-an-html5-canvas/#thecode –

+0

それはJQueryを使用しているので、私はそれを使用していません。 – CyanPrime

+0

いいえ、それは...コードを見ましたか?それは同じページに表示されています。 Sarwarのポイントは、キャンバスを使ったページの例ですが、キーボードイベントハンドラを 'window'オブジェクトに付けることです(ただし、IEでは機能しませんが、キャンバスではありません)。あなたの問題になります(下のthirtydotのコメントも参照してください)。 –

答えて

14
あなたはこのような何かやるべき

<!DOCTYPE html> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

<script type="text/javascript"> 
document.onkeydown = function(event) { 
event = event || window.event; 

var e = event.keyCode; 

//if (e==87 /*w*/){ 
    up = true; 
    throw('up'); 
//} 

if (e==65 /*a*/){ 
    left = true; 
} 

if (e==83 /*s*/){ 
    down = true; 
} 

if (e==68 /*d*/){ 
    right = true; 
} 
} 

document.onkeyup=function(event) { 
event = event || window.event; 

var e = event.keyCode; 

//if (e==87 /*w*/){ 
    up = false; 
    throw('up'); 
//} 

if (e==65 /*a*/){ 
    left = false; 
} 

if (e==83 /*s*/){ 
    down = false; 
} 

if (e==68 /*d*/){ 
    right = false; 
} 
} 
</script> 
</head> 

<body> 
    <input id="ss" type="button" value="start/stop" /> 
    <div id="container" style="border:1px solid; cursor:none; width:480px; height:320px;"> 
     <canvas id="canvas" width="480" height="320"> 
      Canvas not displaying. 
     </canvas> 
    </div> 
</body> 

</html> 
を:作品私が作った

onkeyup="onKeyUp();" onkeydown="onKeydown();" 

簡単なテスト・ページ:

document.onkeydown = function(event) { 
    ... 
} 
document.onkeyup = function(event) { 
    ... 
} 

とは取り除きます

+1

または彼のケースでは 'document.getElementById(" canvas ")。onkeydown = ...'など、私は推測しますか?また、 'event = event ||を実行することを忘れないでください。 window.event; 'それぞれのハンドラの最初のもの(IEがうまくいきません。ちなみに、私は彼の元のコードが他のものには間違いないと確信しています) –

+0

たぶん、しかし、キャンバス要素にアタッチするとイベントが発生することはありませんでした。 – thirtydot

+0

ああ。それはまた彼の問題の一部かもしれない:)確かに私はまだキャンバスを使用していない。 –

関連する問題