2017-02-22 4 views
0

私はこの機能をリセットせずに再現可能にしようとしています。 たとえば、この機能でボタンを押すと、ボタンが0pxから100pxの右に移動します。もう一度ボタンを押すと100pxから200pxになります。それもアニメーション化されるはずですので、ループが終了するまで一度に1px移動します。Javascriptアニメーションをリセットせずに続ける

以下のコードは、0pxから100pxに移動し、もう一度押すと0pxから100pxになるため、1回限りの使用としてのみ機能します。

私はこれを数時間にわたって作業しており、尋ねる前に多くのヘルプソースを調べました。

function goRight() { 
    var pos = 0; 
    var count = pos; 
    var elem = document.getElementById("main"); 
    var id = setInterval(move, 5); 
    function move() { 
      if(pos == count + 100){elem.style.left = pos + 'px'; clearInterval(id);} 
      else {pos++; elem.style.left = pos + 'px';} 
    } 
} 
+0

あなたはどこでこの関数を呼び出しているのですか? –

+0

答えて

1
function goRight() { 
    var elem = document.getElementById("main");     // the element 
    var origin = parseInt(elem.style.left) || 0;     // get the left of the element (as an origin for the animation), 0 if not set yet 
    var pos = 0;             // pos initialized to 0 

    var id = setInterval(move, 5); 
    function move() {           
     if(pos == 101) { clearInterval(id); }     // if pos is 101, then stop the animation 
     else { pos++; elem.style.left = (origin + pos) + 'px';} // if not, then increment it and set the left of the element to pos + origin 
    } 
} 
+0

ありがとうございます。私はそのようにparseIntを使うことやピクセル量の代わりにposとしてposを使うことを考えなかった。正確に私がそれを望んでいた方法で動作します! –

+0

大歓迎です!そのトリックは 'style.left'の価値を得て、何度でも0から始めるのではなく、毎回それを追加することでした... –

1

私はこのような

あなただけのグローバル変数としてPOSをしなければならないと思うとgoRight機能の外にそれを開始:

var pos = 0; 
function goRight() { 
    var count = pos; 
    var elem = document.getElementById("main"); 
    var id = setInterval(move, 5); 
    function move() { 
     if(pos == count + 100){elem.style.left = pos + 'px'; clearInterval(id);} 
     else {pos++; elem.style.left = pos + 'px';} 
    } 
} 

いただきました間違ったコード内で唯一のたびにありますあなたはgoRightを呼び出してposを0に設定し、再びstartから開始します。

しかし、グローバル変数を使用すると、次の時間間隔のために保存されます。

+0

ありがとう、これは私がそれも欲しかったし、シンプルな感じです。 xD –

+0

だから私は私の上の投票を与えてくださいしてください:) – Mahpooya

関連する問題