2013-02-08 44 views
0

我有下面的代碼與if條件的jQuery的setTimeout或setInterval的

if(oldMembership++ <= newMembership) { 
    var digit; 
    $('ul#indexSiteCounterBottom').empty(); 

    for(i = 0; i < 9; i++) { 
     if(membership.toString()[i] == '_') { 
      digit = '&nbsp;'; 
     } else { 
      digit = membership.toString()[i]; 
     } 

     $('ul#indexSiteCounterBottom').append('<li>'+digit+'</li>'); 
     $('ul#indexSiteCounterBottom li:nth-child(3n)').addClass('extra-margin'); 
    } 
} 

如果「如果」的條件是符合規範的其餘部分被運行。

我希望能夠在'if'的每個循環中減慢大約500ms以下代碼的運行。

我試着把setInterval和setTimeout放進去,但是我之前沒有使用它們,'if'條件立即完成了所有循環。

如何將setInterval或SetTimeout添加到此,以便每個'if'循環延遲500ms?一旦'如果'條件滿足,它應該退出定時器/如果條件。

三江源非常多......

回答

1

我認爲這可以解決您的問題...

function execute_if_membership(){ 
    setTimeout(function(){ 
     var digit; 
     $('ul#indexSiteCounterBottom').empty(); 

     for(i = 0; i < 9; i++) { 
      if(membership.toString()[i] == '_') { 
       digit = '&nbsp;'; 
      } else { 
       digit = membership.toString()[i]; 
      } 

      $('ul#indexSiteCounterBottom').append('<li>'+digit+'</li>'); 
      $('ul#indexSiteCounterBottom li:nth-child(3n)').addClass('extra-margin'); 
     } 

     // Execute again if needed 
     if(oldMembership++ <= newMembership) {execute_if_membership();} 
     else{ /* what to do else? maybe call another function */ } 
    },500); 
} 

// execute by the first time 
if(oldMembership++ <= newMembership) {execute_if_membership();} 

 

編輯:有了這個代碼,你第一次調用該函數。函數等待500毫秒並執行,在函數的最後,它檢查是否需要調用另一個時間(循環),如果需要,它再次執行。如果你想在這之後執行一些代碼,你需要把它放在條件的ELSE中,因爲如果你在下面放置了另一個代碼,它將會在沒有等待的情況下執行。這是因爲setTimeoutsetInterval使代碼異步並繼續執行代碼。

+0

非常感謝...工作很好,非常感謝:) – Adam

3
if(membership.toString()[i] == '_') { 
    digit = '&nbsp;'; 
    setTimeout(function() { 
     digitThing(digit); 
    }, 500); 
} 
else { 
    digit = membership.toString()[i]; 
    digitThing(digit); 
} 
function digitThing(digit) { 
    $('ul#indexSiteCounterBottom').append('<li>'+digit+'</li>'); 
    $('ul#indexSiteCounterBottom li:nth-child(3n)').addClass('extra-margin'); 
} 
1

setTimeout是用來延遲功能的執行的功能

你可以用它喜歡:

var to = setTimeout(function() { 

    // Your code that will be executed after 500 ms 

}, 500); 

如果你婉在500ms過後取消呼叫,您可以使用to var並呼叫clearTimout(to)。這將取消timout,你的功能將不會在500ms後運行。

setIntervalsetTimeout不同,因爲它會每隔500毫秒運行一次您的功能而不採取任何措施。它可以被看作是一個調度器。

你可以用它喜歡:

var iv = setInterval(function() { 

    // Your code that will be executed every 500ms 

}, 500); 

如果要停止計劃的過程中,你可以使用iv var和調用clearInterval(iv)。這將取消qscheduler。

對於您的情況,如果您想每次打電話時都應該使用setTimeout

例如,你可以寫這樣的:

// Launch the task if the main test is ok 
if(oldMembership++ <= newMembership) { 

    // Empty your main UL 
    $('ul#indexSiteCounterBottom').empty(); 

    // Run the first process without timeout 
    runProcess(0, 500); 
} 

// Run one process 
function runProcess(i, ms) 
{ 
    // Stop the recursivity when the end of the string is reached 
    if (i >= membership.toString().length) 
     return; 

    // Set default value for the digit 
    var digit = membership.toString()[i]; 

    // Override the digit if requiered 
    if(digit == '_') 
     digit = '&nbsp;'; 

    // Finally process the digit 
    $('ul#indexSiteCounterBottom').append('<li>'+digit+'</li>'); 
    $('ul#indexSiteCounterBottom li:nth-child(3n)').addClass('extra-margin'); 

    // Run the next process in 500ms 
    setTimout(function() { 
     runProcess(i+1, ms); 
    }, ms); 
}