iOS Safari Javascript设置超时问题

iOS Safari Javascript setTimeout Issue

本文关键字:超时 问题 设置 Javascript Safari iOS      更新时间:2023-09-26

我在移动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个iirc)。

有人能告诉我为什么移动safari没有正确执行这个功能,或者我做错了什么吗?

谢谢!

关于这个问题,有很多事情很难推理。一个是没有声明的变量数量,或者没有注释的表达式数量(如在fullcheck != Math.round(fullcheck).WTF!?中),另一个是该代码的行为方式,而不是您希望它的行为方式。

由于代码不完整且不可运行,所以只能猜测您的意思。我猜你是说代码像现在这样大约在两秒内完成,你希望它在50秒内完成。

如果不知道ifull的值,就不可能对正确的超时进行任何计算,所以我不得不猜测你做错了什么。在当前20ms的超时速率下,您将每秒处理大约500行。如果它当前在两秒内运行,则意味着您有4000行。如果它们应该在50秒内填满,你将不得不将超时时间提高到500毫秒。