2010-02-03 161 views
4

我試圖創建一個簡單的動畫。長話短說,我有一個20個小格子和一個外格子的名單。我想在當時在一個大格子內顯示五個小格子。理想情況下,我會每隔5秒獲得一組接下來的5個div。
我使用jQuery AJAX函數來創建小的div,下面的代碼:Javascript暫停循環,ajax,jquery問題

$(document).ready(function(){ 
     var amount=0; 
     $.ajax({ 
      type: "GET", 
      url: "SampleServiceIncidentList.xml", 
      dataType: "xml", 
      success: function(xml){ 

          //creates divs within GadgetMain div, works fine. 

             }); 
          amount = $("#gadgetMain").children().size(); //counts how many small divs there are 
          $("#testText").append("amount of children:"+amount); //and displays it in a test field 
          divideFeed(); 
      }//close success 
     }); //close $.ajax(


     function divideFeed(){ //divides the set of small divs into groups 
      var limit = 5; 
      var pagesNo = Math.ceil((amount/limit)); 
      var minimum=0; 
      var maximum; 
      var i=0; 
      while (i<pagesNo) 
      {    
       minimum= i*limit; 
       maximum=minimum+limit;     


       // 
       // PROBLEM HERE 
       // 
       populate(minimum, maximum); 

       i++; 
      }     
     } 

     function populate(minimum, maximum){ 
      $("#gadgetMain div").addClass('hidden'); //hides all small divs 
      $("#testText").append('<br/>min: '+minimum+' max: '+maximum); //prints current group of divs (0-5; 5-10 etc) 
      $("#gadgetMain div").slice(minimum,maximum).removeClass('hidden'); 
      } 

});

所以,問題是,我不能等待5秒鐘來顯示一組我感興趣的div。我知道它正確地劃分div - 當我提醒最小值和最大值時,它每次關閉警報時都會更改外部div的內容。 但我找不到一種暫停功能的方法。

我會一些幫助非常感謝,它把我逼瘋

回答

2

你不想暫停功能;相反,您希望將控制權交還給瀏覽器,並在間隔後讓它回撥。 window.setTimeout函數做到這一點。 (還有相關的window.setInterval,但我通常喜歡setTimeout

它需要一點精神的邏輯反轉的,但它非常像調用Ajax - 你想要什麼東西,然後放手,讓瀏覽器調用你回來時,當你得到它。

因此,例如:

function doSomething(x) { 

    runner(); 

    function runner() { 
     console.log("x = " + x); 
     --x; 
     if (x > 0) { 
      window.setTimeout(runner, 1000); 
     } 
    } 
} 

doSomething(10); 

...計數到10時,每秒一次。 doSomething幾乎立即返回,但然後runner被調用一次,直到它停止重新調度自己。

+0

非常感謝!它解決了一切:) 一切順利 – klon 2010-02-05 11:16:27