私は何をしようとしていることは与えられた時間内に一連の数字(例:1-100)をプリントアウトする機能です。超簡単。のsetTimeout - (例えば2秒)カウンタの増加速度は指数関数的に
最も難しい部分は、シーケンスアニメーションがゆっくりと開始され、が指数関数的に高速化することです。。
var animationLength = 2000; //ms
var counter = 0,
counterEnd = 100,
countInterval = animationLength/counterEnd; // 20ms
function animate() {
$('#result').text(counter++);
if (counter <= counterEnd) {
//Calculate here dynamically newInterval
var newInterval = countInterval;
countInterval = newInterval;
setTimeout(animate, newInterval);
}
}
animate();
だから、今countInterval
は常に20msのですが、それは指数関数的に減少する、変数でなければなりません:これは私がこれまで持っているものです。例:
counter = 1; => countInterval = 40ms //not sure about that
...
counter = 100; => countInterval = 1ms
そして、これらの間隔のsummatoryが2000msの
https://jsfiddle.net/fvxf7mby/5/
UPDATEすることがあります。@Matsリンドへ
おかげで、私はついに見つけました。 A.Wolfのコメントで述べたフィドルを使用して
var animationLength = 1000; // 1 second
var counter = 0;
var counterEnd = 100;
function animate() {
// Do stuff
$('#output').text(counter++);
animationLength *= 0.5; // not exponential - but speed will half on each iteration
if (counter <= counterEnd) { // Stopping condition
setTimeout(animate, animationLength);
}
}
animate(); // Starting the "loop"
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="output"></div>
ここを見て:http://stackoverflow.com/a/1280279/5768908 –
'requestAnimation'フレームの呼び出しを2つの間隔の時間差を決定するために使用できるタイムスタンプを持つコールバック関数。 https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame – user3297291
'setTimeout'の最小値は現在4msです。 – Seb