3

多くの間隔を含む JavaScript を書いている場合、間隔オブジェクトの配列でそれらを追跡する傾向があります。

function Interval(id, desc){
 this.id = id;
 this.desc = desc;
}

prototypes etc....

次に、次のような間隔関数を作成します

intervalArray.push(new Interval(setInterval(function, milli),"Demo interval"))   

これがOCDに近づいていることは知っていますが、実行中に1つまたは2つのものでclearIntervalを実行したい場合に、開発ツールのプロンプトで惨めなものを追跡する方が簡単なので、問題解決が容易になりました.

そこで質問...

インターバル ID が与えられた場合、その現在のステータスにアクセスする方法はありますか?

つまり、間隔 x を 300000 の繰り返し時間に設定して 5 分ごとに起動する場合、1 分後に 60000 を返す関数 x.timer を取得する方法はありますか?

数回、デバッグ中に、特定の間隔が発火にどれだけ近いかを知ることが役に立ちました。

間隔オブジェクトに別の値を追加できると思います-.lastFired、0で開始し、起動時にタイムスタンプで更新しますが、おそらくブラウザはどこかで間隔を追跡します...

4

2 に答える 2

3

間隔関数をさらに拡張できます。

function Interval(fn, desc, ms){
  this.desc = desc;
  this.status = -1;

  var that = this;

  this.id = window.setInterval(function () {

    // save some progess to the Interval object
    // that is used, because in interval callback this === window
    that.status++;

    // now call your function fn, using this === Interval object
    fn.call(that);
  }, ms);

  this.stop = function () {
    if (this.id) {
      window.clearInterval(this.id);
      this.id = 0;
      this.status = -1;
    }
  };
}

// Usage:
var myInterval = new Interval(function () {
  // frequent action

  // this === Interval object instance
  if (this.status === 5) this.stop();
}, "description", 10000);

これで、コールバックのような onprogress イベント ハンドラーを作成して、進行状況が変化した場合に通知を受け取ることもできます。this.id = window.setInterval(...ステートメントをthis.start = function () {パブリック関数に移動して、後で開始および停止することもできます。

于 2013-01-15T01:11:26.993 に答える
1

ブラウザーは、間隔が満了したときにコールバックが実行されるようにスケジュールします。内部イベント ループの「刻み」ごとに、間隔がすでに切れていないかどうかをチェックします。その場合、そのコールバックが呼び出されます。ブラウザーが間隔を正確に追跡する方法は実装次第ですが、コールバックを呼び出す前に待機する時間のインジケーターは公開されていません。いいえ。_:(

于 2013-01-15T00:56:28.823 に答える