2

10秒から0までカウントダウンしたい。0に達すると、DIVがリロードされ、タイマーが最初からやり直します。私はそれが私が望んでいたように正確に行うことを可能にするこの関数を持っていますが、問題はカウントダウンが0に達して10に戻ると、-1リロード-2リロード-3リロード-4リロードなどをカウントすることです。それは私が望む方法ではありません!:)

これが私のコードです:

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. countdownfunction countdown()は関数名と同じ内部のグローバル変数であり、事実上、countdownception
  3. Intervalあなたが呼んでいるようにあなたは効果的に1秒ごとに新しいものを作成しています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

コードが何をしているのか見てみましょう。

1秒ごとに実行する間隔を設定しています。それはいいです。

うまくいかないのは、毎秒、その間隔が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>

関数は約1秒ごとにのみ実行されることに注意してください。システムがビジーの場合、時間どおりに実行されず、ゆっくりとドリフトしますが、毎回それほどではないため、問題ではない可能性があります。

于 2012-04-17T02:50:01.760 に答える