這聽起來像是羅伯特潘納鬆弛方程式的工作!您可以下載最初的ActionScript 2.0版本here(只需刪除參數上的強類型即可移植到JavaScript),並且可以很好地解釋參數here。
像下面會做你想要什麼(fiddle):
var time = 0;
var diff = 30;
var minTime = 0;
var maxTime = 1000;
// http://upshots.org/actionscript/jsas-understanding-easing
/*
@t is the current time (or position) of the tween. This can be seconds or frames, steps, seconds, ms, whatever – as long as the unit is the same as is used for the total time [3].
@b is the beginning value of the property.
@c is the change between the beginning and destination value of the property.
@d is the total time of the tween.
*/
function easeInOutQuad(t, b, c, d) {
if ((t /= d/2) < 1) return c/2 * t * t + b;
return -c/2 * ((--t) * (t - 2) - 1) + b;
}
function easeOutQuad(t, b, c, d) {
return -c * (t /= d) * (t - 2) + b;
}
function easeInQuad(t, b, c, d) {
return c * (t /= d) * t + b;
}
for (var i = 0, len = diff; i <= len; i++) {
(function(s) {
setTimeout(function() {
//self.turnPages(s);
console.log("Page " + s + " turned");
}, time);
})(i);
time = easeInOutQuad(i, minTime, maxTime, diff);
console.log(time);
}
取而代之的200是一個常數,它應該是「我」的功能。 – Pointy
@Pointy - 然而,的確,我不知道從哪裏開始實現我所需要的數學。 – gordyr
那麼這取決於你想要的緩和曲線看起來像我猜。 – Pointy