2012-09-05 120 views
0

我有一个javascript方法setTimeout()在移动Safari上正确执行的问题。iOS Safari Javascript setTimeout问题

我的代码如下:

function addBlock() { 
    if(i < full) { 
    $('#box-'+i).removeClass('empty'); 
    $('#box-'+i).addClass('full'); 
    i++; 
    setTimeout(addBlock, 20); 
    } 
    else { 
    if(fullcheck != Math.round(fullcheck)) { 
     i = i++; 
     $('#box-'+i).removeClass('empty'); 
//  $('#box-'+i).addClass('halfbox'); 

     $('#total-count').animate({height: barheight}, 5000); 

    } 
    if(usergiven) { 
     $('#box-'+randbox).css('border', '1px SOLID #FF0000'); 
     $('#box-'+randbox).css('background-color', '#FF0000'); 
    } 
    } 
} 

不管是什么超时值,我提供的setTimeout函数,它似乎总是以相同的速度运行。

这个想法是它以每2秒1更快的速度填充一组块(实际数量应该是每秒50个左右)。

谁能告诉我为什么移动Safari不正确执行此功能或我做错了什么?

谢谢!

回答

0

关于这个问题有很多很难解释的事情。一个是没有声明或表达式的变量的数量,没有对他们应该做什么的评论(如在fullcheck != Math.round(fullcheck)。WTF !?中),另一个是这个代码的行为方式,而不是你想如何行为。

由于代码不完整且无法运行,因此只能猜测您的意思。我猜你是在说现在代码在大约两秒内完成,而你希望在五十秒内完成。

不知道ifull的值,不可能对正确的超时进行任何计算,所以我必须猜测你做错了什么。目前的超时时间为20ms,您将每秒处理大约500行。如果它当前在两秒钟内运行,那意味着你有4000行。如果他们应该在五十秒内填补,你将不得不把你的超时时间增加到500毫秒。

+0

谢谢,这个问题不再是真的有关,但据我记得这实际上并不是我的代码,我是把这张贴给其他人。我已经接受了你的答案,因为你已经抽出时间回答了。谢谢! – DarkMantis