0

カウントダウン タイマーが 0 になったときに 25 で再起動する方法を見つけようとしています。何が間違っているのかわかりませんが、うまくいきません。

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

@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 に答える
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

これを試してください、タイマーは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 に答える