2013-02-08 45 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); 
}