0

我正在尝试找出一种方法,让我的倒计时计时器在 25 点重新开始,当它达到 0 时。我不知道我做错了什么,但它不会工作。

Javascript

window.onload = function() {
   startCountDown(25, 1000, myFunction);
}

function startCountDown(i, p, f) {
   var pause = p;
   var fn = f;
   var countDownObj = document.getElementById("countDown");

   countDownObj.count = function(i) {
      //write out count
      countDownObj.innerHTML = i;
      if (i == 0) {
      //execute function
      fn();
      //stop
      return;
   }
   setTimeout(function() {
      // repeat
      countDownObj.count(i - 1);
      },
      pause  
      );
   }
   //set it going
   countDownObj.count(i);
}

function myFunction(){};
</script>

HTML

    <div id="countDown"></div>
4

4 回答 4

1

试试这个,计时器在 0 后重新启动

http://jsfiddle.net/GdkAH/1/

完整代码:

window.onload = function() {
startCountDown(25, 1000, myFunction);
}

function startCountDown(i, p, f) {
    var pause = p;
    var fn = f;
    var countDownObj = document.getElementById("countDown");

    countDownObj.count = function(i) {
    //  write out count
    countDownObj.innerHTML = i;
    if (i == 0) {
    //  execute function
        fn();
        startCountDown(25, 1000, myFunction);
        //  stop
        return;
    }
    setTimeout(function() {
            //  repeat
            countDownObj.count(i - 1);
    }, pause);
}
//  set it going
countDownObj.count(i);
}

function myFunction(){};

​
于 2012-11-30T05:45:54.510 回答
1

我没有看到你重置计数器。当您的计数器下降到 0 时,它会执行该函数并返回。相反,您要执行函数->重置计数器->返回

您可以通过在 fn() 下简单地添加 i = 25 来做到这一点:

function startCountDown(i, p, f) {
var pause = p;
var fn = f;
var countDownObj = document.getElementById("countDown");

countDownObj.count = function(i) {
//  write out count
countDownObj.innerHTML = i;
if (i == 0) {
//  execute function
fn();
i = 25;
//  stop
return;
}
setTimeout(function() {
//  repeat
countDownObj.count(i - 1);
},
pause  
);
}
//  set it going
于 2012-11-30T06:02:38.880 回答
1

在 @Muthu Kumaran 倒计时 1 后代码未显示为零。你可以更新到这个:

if (i < 0) {
//  execute function
    fn();
    startCountDown(10, 1000, myFunction);
    //  stop
    return;
}
于 2012-11-30T06:21:42.603 回答
1

将 setInterval 用于连续运行的计时器的主要原因是调整间隔,使其尽可能接近系统时钟的增量更新,通常为 1 秒,但可能更长。在这种情况下,这似乎没有必要,所以只需使用 setInterval。

下面是一个不向元素添加非标准属性的函数,可以使用 window.onload 中的函数表达式调用它,因此完全避免使用全局变量(不是说有太多意义,但有些人喜欢最小化他们)。

var runTimer = (function() {

  var element, count = 0;

  return function(i, p, f) {
    element = document.getElementById('countDown');

    setInterval(function() {
      element.innerHTML = i - (count % i);
      if (count && !(count % i)) {
        f();
      }
      count++;  
    }, p);
  }
}());

function foo() {
  console.log('foo');
}

window.onload = function() {
  runTimer(25, 1000, foo);
}
于 2012-11-30T06:50:48.560 回答