NPMライブラリの多くは正確なタイマーには使用できません。かなりシンプルです。ここで私が使用しているもののJSfiddleです:正確なタイマーをJavascriptで作成すると、時々負の間隔時間が発生する
setPercentageBar(page) {
if (this.state.pagesById[page.id].active) {
let pagesByIdCopy = Object.assign({}, this.state.pagesById);
let pageCopy = pagesByIdCopy[page.id];
let percent = (100.0/parseFloat(page.durationTime))/10;
pageCopy.percentage += percent;
this.setState({pagesById: pagesByIdCopy});
pageCopy.progressBarNextAt += this.progressBarTime; // this.progressBarTime = 100
console.log('start time');
console.log(pageCopy.progressBarStart);
console.log('next at');
console.log(pageCopy.progressBarNextAt);
console.log('drift');
console.log((new Date().getTime() - pageCopy.progressBarStart) % 100);
console.log('Date().getTime():');
let currTime = new Date().getTime();
console.log(currTime);
console.log('interval time');
console.log(pageCopy.progressBarNextAt - currTime);
console.log('--------------------------------------------------------\n');
if (pageCopy.percentage < 100) {
pageCopy.progressBarTimer = setTimeout(() => this.setPercentageBar(pageCopy),
pageCopy.progressBarNextAt - currTime);
}
}
}
私が反応でこれをやっているように、それは正確なコードはありませんが、それはまったく同じ式です。
私はプログレスバーを更新するためにこれを使用しているので、100msの遅延を使用しています。スムーズに展開するにはプログレスバーが必要です。
私はstartTime、nextAt時間、ドリフト、およびインターバル時間を記録しており、常にうまく開始しました。しかし、ある時点で..間隔時間が負になると私はなぜか分からない!そして、それからすべてがその時点から乱れ始める。私はこの正確なタイマーの複数の数式を試してきましたが、最終的に毎回発生します。インターバル時間が負になると、それらはすべて負になります。
誰もがなぜそれを修正するためのアイデアがありますか?私は100msの各
タイマーが正確なことはありません。..新しい日付はどちらでもありません... https://johnresig.com/blog/accuracy-of-javascript-time/ –
あなたのフィドルで、あなたは「これは働いています!」と書いています。だから質問は何ですか? – trincot
@trincotはペーストビンに投稿したログを見ています。あなたはある時点で間隔がマイナスになっているのを見ることができます。なぜそれをしているのか理解しようとしています。 – user1189352