2011-11-17 5 views
1

꽤 간단한 것이어야합니다. 이 jQuery 애니메이션이 무한 루프가 아닌 1 루프 이후에 실행되기를 바란다.jQuery에서 무한 루프를 방지하십시오.

이 코드는 가장 단순한 코드이지만, 필자는 잠시 후 도움을 받았다. 필자는 필자의 삶에서 왜 반복되는지 알아낼 수 없다.

감사합니다.

jsFiddle : http://jsfiddle.net/SFejj/ 및 코드 :

function move(jElem, bUp, iSpeed) { 
    jElem.animate(
     { 
     opacity: (bUp ? '+' : '-') + '0.1', 
     width: (bUp ? '+' : '-') + '=200', 
     height: (bUp ? '+' : '-') + '=200'}, 
     iSpeed, 
     function() { 
      move(jElem, !bUp, iSpeed); 
     } 
    ); 
} 

$(document).ready(function() { 
    $('.navImage').each(function(iIndex, jElem) { 
     // get random delay 
     var iTime = Math.floor(Math.random() * 1000); 
     // get random speed 
     var iSpeed = Math.floor(Math.random() * 1000) + 1500; 
     setTimeout(
      function() { 
       move($(jElem), true, iSpeed); 
      }, 
      iTime 
     ); 
    }); 
}); 

답변

3

당신은 반복적으로 이동 함수를 호출 이동 기능이 있습니다. 스택 오버플로를 유발하는 좋은 방법!

+1

+1 스택 오버플로 사용 : –

3

호출 한 애니메이션의 콜백을 다시 제거하면됩니다. 당신이 그것을 루프 1 시간을 원하는 경우

function move(jElem, bUp, iSpeed) { 
    jElem.animate(
     { 
      opacity: (bUp ? '+' : '-') + '0.1', 
      width: (bUp ? '+' : '-') + '=200', 
      height: (bUp ? '+' : '-') + '=200' 
     },iSpeed 
    ); 
} 

당신은 당신은 기능 정지가 어떤 후에 반복 할 줄 loopTimes < 1을 변경할 수 있습니다 1 씩 증가 변수를 추가,

function move(jElem, bUp, iSpeed) { 
    jElem.animate(
     { 
     opacity: (bUp ? '+' : '-') + '0.1', 
     width: (bUp ? '+' : '-') + '=200', 
     height: (bUp ? '+' : '-') + '=200'}, 
     iSpeed, 
     function() {      
      move(jElem, !bUp, iSpeed); // move will be called at the end of animate recursively 
     } 
     } 
    ); 
} 
+0

이 기능은 한 번만 실행됩니까? 나는 오해가 있었을 지 모르지만 OP가 한 번 (두 번 총을 의미) 루프를 반복하고 멈추고 싶다고 생각했습니다. – joshuahedlund

+0

이것이 내가 필요한 건데, 응원가 – Luke

+0

아, 좋아. 그러면이 대답을 받아 들여야합니다. – joshuahedlund

1

전에이 일을했다 원하는 루프의 수.

function move(jElem, bUp, iSpeed, loopTimes) { 
    jElem.animate(
     { 
     opacity: (bUp ? '+' : '-') + '0.1', 
     width: (bUp ? '+' : '-') + '=200', 
     height: (bUp ? '+' : '-') + '=200'}, 
     iSpeed, 
        if(loopTimes < 1) 
        { 
         loopTimes++; 
         function() { 
          move(jElem, !bUp, iSpeed, loopTimes); 
         } 
        } 
    ); 
} 

$(document).ready(function() { 
    $('.navImage').each(function(iIndex, jElem) { 
     // get random delay 
     var iTime = Math.floor(Math.random() * 1000); 
     // get random speed 
     var iSpeed = Math.floor(Math.random() * 1000) + 1500; 
     setTimeout(
      function() { 
       move($(jElem), true, iSpeed, 0); 
      }, 
      iTime 
     ); 
    }); 
}); 
+0

이것은 유용 할 수 있습니다. 감사합니다. – Luke

+1

사실 저는 이것을 보았습니다. 구문을 보면 애니메이션 호출에서 그 일을하는 것이 잘못이라고 생각하지만, 변수를 전달하는 것은 일반적인 개념입니다. – joshuahedlund

관련 문제