2011-11-17 89 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

只需刪除正在調用的動畫的回調再移動即可。

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

你被

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

之前,如果你想讓它循環1次這樣做,只是通過添加1.增量能改線loopTimes < 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