2

タイマー用のこのコードがあります。0:0 で停止させようとしていますが、負の数になり続けます。これを修正するためのアイデアは役に立ちます。

<html>
  <head>
    <script>
      function startTimer(m,s)
      {
        document.getElementById('timer').innerHTML= m+":"+s;
        if (s==0)
        {
          if (m == 0)
          {
            clearTimeout(t);
          }
          else if (m != 0)
          {
            m = m-1;
            s = 60;
          }
        }
        s = s-1;
        t=setTimeout(function(){startTimer(m,s)},1000);
      }
    </script>
  </head>

  <body>
    <button onClick = "startTimer(0,5)">Start</button>

    <p id = "timer">00:00</p>
  </body>
</html>
4

4 に答える 4

0

コメントだけです—関数はもっとスリムになる可能性があります:

function pad(n) {
  return (n<10? '0':'') + n;
}

function startTimer(m,s) {
  document.getElementById('timer').innerHTML = pad(m) + ":" + pad(s);
  s -= s? 1 : m-- && -59;
  if (m != -1) 
    setTimeout(function(){startTimer(m,s)},1000);
}

setTimeout は指定された時間に正確に実行されないため、ゆっくりとドリフトするため、日付オブジェクトを使用してラグを次の 1 秒に調整する必要があります。

于 2013-04-21T14:21:15.383 に答える
0

タイムアウト関数を外部にして、次のように時間が 0:0 を超えたときに呼び出すことができます。

  function startTimer(m,s)
  {
    document.getElementById('timer').innerHTML= m+":"+s;
    if (s==0)
    {
      if (m == 0)
      {
        alert('done');
      }
      else if (m != 0)
      {
        m = m-1;
        s = 60;
        t();
      }
    }
    s = s-1;
    t();
    function t(){setTimeout(function(){startTimer(m,s)},1000)};
  }

または簡略版:

  function startTimer(m,s)
  {
    document.getElementById('timer').innerHTML= m+":"+s;
      (s == 0) ? (m == 0 ? alert('done') : (m--, s = 60, t())) : (s--, t());
      function t(){ setTimeout(function(){startTimer(m,s)},1000)};
  }

jsfiddle

于 2013-04-21T13:32:42.987 に答える