Last active
October 11, 2018 13:53
-
-
Save monsieuroeuf/3916085 to your computer and use it in GitHub Desktop.
Proportional scale with Ease and Wizz inOutBack #easeandwizz
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Ease and Wizz 2.0.2 : inOutBack : All keyframes | |
// Ian Haigh (http://ianhaigh.com/easeandwizz/) | |
// Last built: 2012-09-26T16:53:49+10:00 | |
// some defaults | |
var p = 0.8; // period for elastic | |
var a = 50; // amplitude for elastic | |
var s = 1.70158; // overshoot amount for "back" | |
function easeandwizz_inOutBack(t, b, c, d) { | |
if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; | |
return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; | |
} | |
function easeAndWizz() { | |
var n = 0; | |
if (numKeys > 0) { | |
n = nearestKey(time).index; | |
if (key(n).time > time) { n-- } | |
} | |
try { | |
var key1 = key(n); | |
var key2 = key(n+1); | |
} catch(e) { | |
return null; | |
} | |
// determine how many dimensions the keyframes need | |
var dim = 1; // It's gotta have at least ONE dimension | |
try { | |
key(1)[1]; | |
dim = 2; | |
key(1)[2]; | |
dim = 3; | |
} catch(e) {} | |
t = time - key1.time; | |
d = key2.time - key1.time; | |
sX = key1[0]; | |
eX = key2[0] - key1[0]; | |
if (dim >= 2) { | |
sY = key1[1]; | |
eY = key2[1] - key1[1]; | |
if (dim >= 3) { | |
sZ = key1[2]; | |
eZ = key2[2] - key1[2]; | |
} | |
} | |
if ((time < key1.time) || (time > key2.time)) { | |
return value; | |
} else { | |
val1 = easeandwizz_inOutBack(t, sX, eX, d, a, p, s); | |
switch (dim) { | |
case 1: | |
return val1; | |
break; | |
case 2: | |
val2 = easeandwizz_inOutBack(t, sY, eY, d, a, p, s); | |
return [val1, val1]; // changed this line to maintain the proportion | |
break; | |
case 3: | |
val2 = easeandwizz_inOutBack(t, sY, eY, d, a, p, s); | |
val3 = easeandwizz_inOutBack(t, sZ, eZ, d, a, p, s); | |
return [val1, val2, val3]; | |
break; | |
default: | |
return null; | |
} | |
} | |
} | |
(easeAndWizz() || value); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment