2016-04-22 26 views
1

私はキャンバス要素内で矩形を移動しようとしていますが、運がありませんでした。これはこれまでの私のコードです。私はjQueryや他のライブラリではなく、PURE JavaScriptでやりたいJavaScriptアニメーションを使用して矢印キーで長方形を移動する

私はJavaScript:

window.onload = beginningMovement; // load beginning movement 

    function beginningMovement() { 
     var elem = document.getElementById("rectangle"); 
     var pos = 0; 
     var id = setInterval(frame, 8); 
     function frame() {    
     if (pos == 203) { 
      clearInterval(id); 

      //Color funcs 
      setTimeout(black, 0); 
      setTimeout(lightgray, 500); 
      setTimeout(black, 1000); 
      setTimeout(lightgray, 1500); 
      setTimeout(black, 2000); 
      setTimeout(lightgray, 2500); 

      function black() { 
      var color = document.getElementById('container').style.backgroundColor = "black"; 
      } 

      function lightgray() { 
      var color = document.getElementById('container').style.backgroundColor = "lightgray"; 
      } 
      //End of color funcs 


     } else { 
      pos++; 
      elem.style.top = pos + 'px'; 
      elem.style.middle = pos + 'px'; 
     } 
     } 
    } 

    //Arrow switching 
    var X = 40; 
    var Y = 20; 

    function switchKey(event) { 
     Key = event.keyCode; 

     myCanvas.fillstyle = "white"; 
     myCanvas.filRect(X, Y, 50, 50); 
    } 

    switch(key) { 
     case 37: X -=5; 
     break; 
     case 37: Y -=5; 
     break; 
     case 37: X +=5; 
     break; 
     case 37: Y +=5; 
    } 

    myCanvas.fillstyle = "blue"; 
    myCanvas.filRect(X, Y, 50, 50); 

HTML:

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 

    <style type="text/css"> 

     #container { 
      width: 450px; 
      height: 400px; 
      border: 5px solid black; 
      background: lightgray; 
     } 

     #rectangle { 
      height: 50px; 
      width: 150px; 
      background: cyan; 
      margin-left: 150px; 
      margin-top: 160px; 
      position: absolute; 
     } 

    </style> 
    </head> 
    <body onkeyup="switchKey(event)"> 
     <div id="container"> 
      <div id="rectangle"> 

      </div> 
     </div> 
    </body> 
    </html> 

私は時間のためにこれをしてきたし、任意の運を持っていませんでした。もし誰かが私を助けて、これをすぐにやることができたら、私はそれを感謝します。

答えて

0

あなたのコードには多くの問題があり、最終的には簡単なバージョンを見直すことが簡単になると思っていました。本当にあなたのバージョンにこだわりたいのであれば、ブラウザのコンソールにエラーがないかどうか確認してください。問題が表示されます。一部の機能はまだ利用できませんonloadkey変数はありませんが、Key変数があります。変数や関数のスコープに関する他の問題もありました。

ここであなたが見てするための新しいバージョンです:http://codepen.io/antibland/pen/ONwEBE

は、それは私の最高の仕事ではないのですが、それはあなたのために正しい方向への一歩です。 setIntervalの代わりに、​​を使用して再描画を行う必要があります。それははるかにパフォーマンスが良いです(興味があればhereの詳細)。

私のデモでは、実際の<canvas>要素が使用されています。小さな矩形が追加されます。あなたのコードにmyCanvasという変数が含まれているので、実際のキャンバスを使用しようと思っていました。そうでなければ、謝罪します。いずれにしても、小さい矩形が壁を越えて移動するのを防ぐため、そこに境界チェックを追加することをお勧めします。

幸運を祈る!

関連する問題