1

タイマーの早送りに問題があります。このスタジアムでは非常に基本的です。数字を足す間隔があります。このような:

setInterval(function () {
    //+1 second
    //Format output to 00:00
    //Handle minute update
}, 1000);

これは完璧に機能します。タイマーは通常の速度で進んでいます。私がやりたいのは、このタイマーを早送りすることです。タイマー分に1秒かかるようにしたい。私が試してみました:

setInterval(function () {
    //+1 second
    //Format output to 00:00
    //Handle minute update
}, 15);

それは時々機能し、時には機能しません。01:00ではなく01:02に停止することがあります。数学の知識が足りないのかもしれませんが、わかりません。どうしますか?「タイマー分」ごとにタイマーを停止および開始するので、間隔が正しいことが重要です。

編集 これが私がそれをどのように機能させたいかというフィドルです:http://jsfiddle.net/tbleckert/pF4gs/

編集2 たぶん、タイマーを停止する時間を調整する必要がありますか?

編集315ms はほとんどの場合機能するようです。しかし、何かがutを信頼できないものにしているので、最善の方法は時間を調整することだと思います。

4

3 に答える 3

0

間隔を変数に格納してクリアし、別の遅延で再開できるようにする必要があると思います。

var delay = 1000; // JavaScript uses milliseconds, so 1000 = 1 second
var theTimer  = '';

function startTimer(){
  theTimer = setInterval(function () {
     // Do awesome stuff here
  }, delay);
}

startTimer();

これで、間隔を変更したり、タイマーを早送りしたりする場合は、電流setIntervalをクリアして再度定義するだけです-

clearInterval(theTimer); // stop and clear the current timer
delay = 500; // Crank it up to twice the speed! 0.5 seconds!
startTimer(); // start a new setInterval();

これが簡単なデモです

于 2013-01-12T03:21:45.880 に答える
0
<!DOCTYPE html>
<html>
<head>
<script>
function myTimer(){
    this.startTime=0;
    this.intervalID=0;
    this.timePassed=0;
    this.multiplier=1;
    this.outputElement=null;
    this.start=function(){
        clearInterval(this.intervalID);
        this.timePassed=0;
        this.outputElement=document.getElementById("output");
        this.startTime=new Date();
        var me = this;
        this.intervalID=setInterval(function(){
            me.update(me);
        },100);
    }
    this.toTwoDigit=function(num){
        if(num<10){
            return "0"+num;
        }
        return new String(num);
    }
    this.toThreeDigit=function(num){
        if(num<10){
            return "00"+num;
        }
        if(num<100){
            return "0"+num;
        }
        return new String(num);
    }
    this.update=function(me){
        me.timePassed=me.timePassed+(100*me.multiplier);
        var seconds=Math.floor(me.timePassed/1000);
        var hours = Math.floor(seconds/3600);
        var minutes = seconds-(hours*3600);
        seconds = seconds%60;
        minutes=Math.floor(minutes/60);
        me.outputElement.innerHTML= me.toTwoDigit(hours)+":"
            +me.toTwoDigit(minutes)+":"
            +me.toTwoDigit(seconds)
            +":"+me.toThreeDigit(Math.floor(me.timePassed%1000));
    }
    this.speedup=function(){
        this.multiplier=this.multiplier*2;
    }
    this.slowDown=function(){
        this.multiplier=this.multiplier/2;
    }
    this.stop=function(){
        clearInterval(this.intervalID);
        this.update(this);
    }
}
var t = new myTimer();
</script>
</head>
<body onload="t.start();">
<input type="button" value="speed up" onclick="t.speedup()"></input>
<input type="button" value="slow down" onclick="t.slowDown()"></input>
<input type="button" value="stop" onclick="t.stop()"></input>
<input type="button" value="restart" onclick="t.start()"></input>
<input type="button" value="(re)start times 60" onclick="t.multiplier=60;t.start()"></input>
<div id="output"></div>
</body>
</html>
于 2013-01-12T03:50:12.267 に答える
0

さて、私はこれに自分で答えるつもりです。私は十分に明確ではなかったと思います。タイマーを開始すると、同時にタイムアウトが開始され、1秒後にタイマーが停止します。これは問題が発生する場所です。タイマーが停止したときに、タイマーが常に01:00を表示するとは限りません。

したがって、最終的な解決策は、停止するたびに秒を00に設定することです。すべてが非常に高速に行われるため、気付かないでしょう。

setTimeout(function () {
  clearInterval(interval);
  $('.clock').html(rMin.slice(-2) + ':00');
}, 1000);

更新されたフィドルを確認してください:http: //jsfiddle.net/tbleckert/pF4gs/2/

于 2013-01-17T07:35:34.773 に答える