2017-02-22 1 views
0

이 기능을 재설정하지 않고 반복 할 수 있도록 노력하고 있습니다. 예를 들어,이 기능으로 버튼을 누르면 버튼이 0px에서 100px로 오른쪽으로 이동합니다. 버튼을 다시 누르면 100px에서 200px로 이동합니다. 그것은 애니메이션이기도합니다. 그래서 루프가 끝날 때까지 한 번에 1px 씩 움직입니다.자바 스크립트 애니메이션을 재설정하지 않고 계속하십시오.

아래 코드는 0px에서 100px로 이동하고 다시 누르면 0px에서 100px로 이동하기 때문에 한 번만 사용할 수 있습니다.

나는 몇 시간 동안이 작업을 해왔으며, 묻기 전에 많은 도움을 얻었습니다.

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';} 
    } 
} 

무엇이 잘못된 코드에서이 매 시간 :

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를 사용하는 것을 생각하지 않았습니다. 내가 원했던 정확하게 작동하는 방식! –

+0

당신을 환영합니다! 그 트릭은 'style.left'의 가치를 얻고 다시 0에서 시작하는 대신 매번 추가하는 것입니다. –

1

나는 당신이 단지 전역 변수로 POS를하고 goRight 기능이 같은

외부로 시작해야합니다 생각 당신은 goRight를 0으로 설정하고 다시 처음부터 시작하도록 pos를 호출합니다.

하지만 전역 변수를 사용하면 다음 시간 간격으로 저장됩니다.

+0

고맙습니다. 나는 멍청한 xD –

+0

을 느끼기 위해서만 시간을 보낸 후 여기에 오는 것이 너무 좋아서 제 위로 투표 해주세요. :) – Mahpooya

관련 문제