まずはソース。
function easing(time, begin, change, duration) {
var s = 2.5;
if (t / d >= 1) {
return b + c;
}
return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;
}
//分かりやすく分解
var e = t / d - 1;
c * (e * e * (3.5 * e + 2.5) + 1) + b;
//+ bはスタートからの値を求めるため、実際にイージングを行なっているのはその前の式。
//かつ、cが最終変化量でイージングの性質として0 -> 1に変化する必要があるから、
//実質イージングを成しているのはcとbを抜いた部分。
(e * e * (3.5 * e + 2.5) + 1)
//さらに、最後に+1されているため、その前の部分が-1 -> 0に変化する。よって
//1 < (e * e * (3.5 * e + 2.5) < 0
//となる。
s = 2.5
で行なっているのが、イージング途中で1を超える値の定義。
e = t / d - 1
の部分で、渡された時間を逆点させ、-1 -> -0.9 -> -0.8 … -0.1 -> 0
のように変異させる。
((s + 1) * e + s)
の部分で、tにマイナス値が渡るためsの値を減ずることになるが、-0.5を境にプラスの値が大きくなるため結果増加値が上がり、上限を行き過ぎてから到達地点に達する、という動きになる。
まぁ基本的に0 -> 1
に遷移するのでそれをベースに色々書いてみたい。