2

我想从 10 秒倒计时到 0。当它达到 0 时,DIV 将重新加载,计时器将重新开始。我有这个功能可以让它完全按照我的意愿去做,但问题是当倒计时达到 0 并回到 10 时,它会计数 -1 reload -2 reload -3 reload -4 reload等等。这不是我想要的!:)

这是我的代码:

var time = setInterval(countdown, 1000);
function countdown() {
    var count = 10;
    countdown = setInterval(function() {
        $('#countdown').html(count + ' sekunder kvar');

        if(count == 0) {
            $('#weather-data').load('jquery-fetch/fetch-weatherdata.php?place=' + myplace);
            clearInterval(countdown);
        }

        count--;
    }, 1000);
}

如何解决我的问题,使计时器从 10 倒计时到 0 并永远重复该倒计时?

提前致谢。

编辑

当此函数第一次达到 0 并重新开始时,它的计数如下:10、9、8、10、7、6、5、4、3、2、1、10、9、8、7、10 , 6, 5, 4, 3, 2, 1, 10, 9, 8, 10, 7, 6 等等。为什么这段代码会这样?

function countdown() {
    var count = 10;
    var timerId = setInterval(function() {
        $('#countdown').html(count + ' sekunder kvar');
        count--;

        if(count == 0) {
            $('#weather-data').load('jquery-fetch/fetch-weatherdata.php?place=' + myplace);
            clearInterval(timerId);
            countdown();
        }
    }, 1000);
}

countdown();

提前致谢!

4

3 回答 3

5

我在你的脚本中看到了很多问题......所以不知道你是如何让它工作的......

  1. 函数名不能有-,所以调用不起作用:S
  2. countdown是您内部的一个全局变量function countdown(),与您的函数名称相同,实际上是countdownception
  3. Interval当你打电话时,你每秒钟都在有效地创建一个新的countdown

要实现您想要的,请尝试更简单的方法:

function countdown() {
    // your code goes here
    var count = 10;
    var timerId = setInterval(function() {
        count--;
        console.log(count);

        if(count == 0) {
            // your code goes here
            count = 10;
        }
    }, 1000);
}

countdown();

http://jsfiddle.net/Xrbm5/13/

于 2012-04-17T02:20:59.407 回答
3

看看你的代码在做什么。

您正在设置每秒运行的时间间隔。没关系。

不好的是,每一秒,这个间隔都会创建一个新的间隔,从 10 开始倒计时。

此外,您正在设置countdown为全局变量。因此,当您的第一个计数器达到零时,它实际上会清除 LAST 计时器,让第一个计时器愉快地继续为负数,而您一直在产生新的间隔。

总的来说,这是一场灾难。

于 2012-04-17T02:27:03.367 回答
0

如果您只想每 10 秒更新一次页面,那么:

setTimeout(function() {
   // run some code
},10000);

如果您想要倒计时,则仅在每个偶数 10 处重置计数器。以下添加了启动和停止功能,它从停止的位置重新统计。此外,如果正在运行,单击开始不会启动另一个。

var weatherRefresh = (function() {
  var count = 10;
  var timerRef;
  return {
    start: function() {

      // If already running, leave it running
      if (timerRef) return;

      timerRef = setInterval(function() {
        // Display count
        document.getElementById('dislayedCount').innerHTML = count;

        if (!count--) {
          // count is zero, refresh weather info
          // and start again
          count = 10;
        }
      }, 1000);
    },
    stop: function() {
      timerRef && clearInterval(timerRef);
      timerRef = null;
    }
   };
}());

以及一些使其工作的按钮(或在页面加载时启动它):

<button onclick="weatherRefresh.start();">Start</button>
<button onclick="weatherRefresh.stop();">Stop</button>

请注意,该功能只会大约每秒运行一次,如果系统很忙,它将无法按时运行并且会缓慢漂移,但每次不会太多,因此可能无关紧要。

于 2012-04-17T02:50:01.760 回答