jQuery函数连续运行,接近列表中的数字

时间:2013-10-27 04:09:59

标签: javascript jquery timer

我正在尝试通过递增/递减所需的时间来获取jquery函数以在列表中的同一时间帧中接近不同的数字。那是我有一个清单:

// (initialised outside the function scope)
var numbers = [10, 5, 13, 1, 1000];
var curNumber = 0;
var i = 0;

该功能应该花费与curNumber = 0 to number[0] = 10相同的时间(例如1秒)到达curNumber = 0 to number[4] = 1000。在上面的列表中,代码将在1秒内完成每个循环,从0到10到5到13到1到1000(如果最初curNumber = 0则总共5秒)。

我的目标是一个连续运行的简单功能,例如:

while(true) {
    if (curNumber < numbers[i])
      curNumber++;
    else if (curNumber > numbers[i])
      curNumber--;

    if (curNumber == numbers[i]) {
      alert(numbers[i] + " number reached!");
      i > numbers.length ? i = 0 : i ++;
    }
}

计时器按钮如下所示:

$("#start").click(function() {
   myTimerFunction();
});

我应该使用var refreshId = setInterval(function(){},1000);功能? - 或者只是每隔1000毫秒运行一次这个函数与数字接近的速度无关?

2 个答案:

答案 0 :(得分:1)

我不完全确定“更改速率”是什么意思,但是如果在执行期间调用之间的延迟会发生变化(即,进程应该加速或减慢),那么我会使用{{ 1}}让函数排队下一次调用自己,用一个变量来指定延迟:

setTimeout()

如果间隔保持不变,那么var delay = 1000; function myTimerFunction() { // do something // ... if (someCondition) { // change delay somehow } setTimeout(myTimerFunction, delay); } 就可以了,不过我个人更喜欢使用setInterval(),因为我通常会发现使用以下代码更简单:

setTimeout()

...决定是否保持“循环”而不是保存时间间隔ID,然后在稍后再次调用 if (someCondition) setTimeout(myTimerFunction, delay); 之前调用clearInterval()

答案 1 :(得分:0)

使用像这样的持有人变量refreshId应该没问题。要更改计时器,你只需要这样的东西:

var numberStep = function () {
  if (curNumber < number[i])
    curNumber++;
  else if (curNumber > number[i])
    curNumber--;

  if (curNumber == number[i]){
    alert(number[i] + " number reached!");
    i++; //(or if i > numbers.length change to 0)
  }
};

var myTimerFunction ( interval, currentTimer ) {
  if ( currentTimer ) clearInterval(currentTimer);
  return setInterval( numberStep, interval );
};

var refreshId = myTimerFunction( startingInterval );

然后,只要您想更改间隔,就可以使用refreshId = myTimerFunction( newInterval, refreshId );。在您在评论中提供的示例中,您将startingInterval设置为1000,将newInterval设置为500。