2011-11-10 7 views
0

私はJavaScriptを学習しています。私の演習の1つは、ボックスを左から右に移動することでした。最初の数サイクルはうまくいきますが、それが乱雑になり、何が原因か分かりません。私はボックスを左から右に移動しようとしますが、数サイクル後にクラッシュします。

function preparePage(){ 
     var box = document.getElementById("box"); 
     var leftPosition = 0; 
     box.style.position = "absolute"; 

     function animateRight(){ 
      leftPosition += 1; 
      if (leftPosition<=300){ 
        box.style.left = leftPosition+"px"; 
      } else { 
       console.log("leftPosition = ",leftPosition); 
       clearInterval(intervalRight); 
       intervalLeft = setInterval(animateLeft, 20); 
       } 
     } 

     function animateLeft(){ 
      if (leftPosition>=0){ 
       leftPosition -=1; 
       box.style.left = leftPosition+"px"; 
      } else { 
       console.log("leftPosition =", leftPosition); 
       clearInterval(intervalLeft); 
       setInterval(animateRight,20); 
      } 
     } 

     intervalRight = setInterval(animateRight,20); 
    } 



    window.onload = function(){ 
     preparePage(); 
    } 
+0

"それは汚い取得" を定義します。 – Toomai

+0

[完全なコードはこちらです](http://pastebin.com/e9keWpEV)。最初は、左に行くと動きが早くなり、片方からもう一方へ、またはるかに300px以上にジャンプします。 – pumpalarumpa

答えて

1

変数を右に動かすためにハンドルを置くのを忘れました。 2度目の左への移動を開始すると、現在の緯度が右に進むのを止めることはなく、再び最初の間隔を停止しようとします。

変更この:

setInterval(animateRight,20); 

へ:

intervalRight = setInterval(animateRight,20); 
+0

ありがとう!それは今、完璧に動作しますが、私はまだそれがそのように動作していた理由を理解していないことを認めています...それは、すべてのサイクルで左に速くて速く動いていて、最終的にウィンドウの端からブラウザがクラッシュする可能性があります。 – pumpalarumpa

+0

ボックスが左に移動するたびに、もはや存在しなかった間隔を停止しようとしましたが、別の間隔を開始しました。これで、ボックスがどこに行くべきかについていくつかの間隔があり、ブラウザに過負荷をかけるまで常に間隔を広げていきます。 – Guffa

+0

もう一度ありがとう、私は今それを理解すると思います。私はleftPosition + = 1を置くと、 ifステートメントでは、ハンドルを設定しなくてもうまく動作しますが、バックグラウンドには多くの実行タイマーがあります(これまでのブラウザのパフォーマンスには驚くほど効果がありません)。私は最初の場所でifステートメントに繰り返しを置くと、欠けているハンドルの問題については知りませんでした。 – pumpalarumpa

関連する問題