Skip to content

Instantly share code, notes, and snippets.

@berkaytumal
Created April 21, 2023 01:30
Show Gist options
  • Save berkaytumal/c2ad29b7c68ed38e65fc12683cc4e120 to your computer and use it in GitHub Desktop.
Save berkaytumal/c2ad29b7c68ed38e65fc12683cc4e120 to your computer and use it in GitHub Desktop.
Easing Functions
const easing = {
easeInSine(t) {
return -1 * Math.cos(t * (Math.PI / 2)) + 1;
},
easeOutSine(t) {
return Math.sin(t * (Math.PI / 2));
},
easeInOutSine(t) {
return -0.5 * (Math.cos(Math.PI * t) - 1);
},
easeInQuad(t) {
return t * t;
},
easeOutQuad(t) {
return t * (2 - t);
},
easeInOutQuad(t) {
return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;
},
easeInCubic(t) {
return t * t * t;
},
easeOutCubic(t) {
var t1 = t - 1;
return t1 * t1 * t1 + 1;
},
easeInOutCubic(t) {
return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;
},
easeInQuart(t) {
return t * t * t * t;
},
easeOutQuart(t) {
var t1 = t - 1;
return 1 - t1 * t1 * t1 * t1;
},
easeInOutQuart(t) {
var t1 = t - 1;
return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * t1 * t1 * t1 * t1;
},
easeInQuint(t) {
return t * t * t * t * t;
},
easeOutQuint(t) {
var t1 = t - 1;
return 1 + t1 * t1 * t1 * t1 * t1;
},
easeInOutQuint(t) {
var t1 = t - 1;
return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * t1 * t1 * t1 * t1 * t1;
},
easeInExpo(t) {
if (t === 0) {
return 0;
}
return Math.pow(2, 10 * (t - 1));
},
easeOutExpo(t) {
if (t === 1) {
return 1;
}
return -Math.pow(2, -10 * t) + 1;
},
easeInOutExpo(t) {
if (t === 0 || t === 1) {
return t;
}
var scaledTime = t * 2;
var scaledTime1 = scaledTime - 1;
if (scaledTime < 1) {
return 0.5 * Math.pow(2, 10 * scaledTime1);
}
return 0.5 * (-Math.pow(2, -10 * scaledTime1) + 2);
},
easeInCirc(t) {
var scaledTime = t / 1;
return -1 * (Math.sqrt(1 - scaledTime * t) - 1);
},
easeOutCirc(t) {
var t1 = t - 1;
return Math.sqrt(1 - t1 * t1);
},
easeInOutCirc(t) {
var scaledTime = t * 2;
var scaledTime1 = scaledTime - 2;
if (scaledTime < 1) {
return -0.5 * (Math.sqrt(1 - scaledTime * scaledTime) - 1);
}
return 0.5 * (Math.sqrt(1 - scaledTime1 * scaledTime1) + 1);
},
easeInBack(t) {
var magnitude = arguments.length <= 1 || arguments[1] === undefined ? 1.70158 : arguments[1];
var scaledTime = t / 1;
return scaledTime * scaledTime * ((magnitude + 1) * scaledTime - magnitude);
},
easeOutBack(t) {
var magnitude = arguments.length <= 1 || arguments[1] === undefined ? 1.70158 : arguments[1];
var scaledTime = t / 1 - 1;
return scaledTime * scaledTime * ((magnitude + 1) * scaledTime + magnitude) + 1;
}, easeInOutBack(t) {
var magnitude = arguments.length <= 1 || arguments[1] === undefined ? 1.70158 : arguments[1];
var scaledTime = t * 2;
var scaledTime2 = scaledTime - 2;
var s = magnitude * 1.525;
if (scaledTime < 1) {
return 0.5 * scaledTime * scaledTime * ((s + 1) * scaledTime - s);
}
return 0.5 * (scaledTime2 * scaledTime2 * ((s + 1) * scaledTime2 + s) + 2);
}, easeInElastic(t) {
var magnitude = arguments.length <= 1 || arguments[1] === undefined ? 0.7 : arguments[1];
if (t === 0 || t === 1) {
return t;
}
var scaledTime = t / 1;
var scaledTime1 = scaledTime - 1;
var p = 1 - magnitude;
var s = p / (2 * Math.PI) * Math.asin(1);
return -(Math.pow(2, 10 * scaledTime1) * Math.sin((scaledTime1 - s) * (2 * Math.PI) / p));
},
easeOutElastic(t) {
var magnitude = arguments.length <= 1 || arguments[1] === undefined ? 0.7 : arguments[1];
var p = 1 - magnitude;
var scaledTime = t * 2;
if (t === 0 || t === 1) {
return t;
}
var s = p / (2 * Math.PI) * Math.asin(1);
return Math.pow(2, -10 * scaledTime) * Math.sin((scaledTime - s) * (2 * Math.PI) / p) + 1;
}, easeInOutElastic(t) {
var magnitude = arguments.length <= 1 || arguments[1] === undefined ? 0.65 : arguments[1];
var p = 1 - magnitude;
if (t === 0 || t === 1) {
return t;
}
var scaledTime = t * 2;
var scaledTime1 = scaledTime - 1;
var s = p / (2 * Math.PI) * Math.asin(1);
if (scaledTime < 1) {
return -0.5 * (Math.pow(2, 10 * scaledTime1) * Math.sin((scaledTime1 - s) * (2 * Math.PI) / p));
}
return Math.pow(2, -10 * scaledTime1) * Math.sin((scaledTime1 - s) * (2 * Math.PI) / p) * 0.5 + 1;
}, easeOutBounce(t) {
var scaledTime = t / 1;
if (scaledTime < 1 / 2.75) {
return 7.5625 * scaledTime * scaledTime;
} else if (scaledTime < 2 / 2.75) {
var scaledTime2 = scaledTime - 1.5 / 2.75;
return 7.5625 * scaledTime2 * scaledTime2 + 0.75;
} else if (scaledTime < 2.5 / 2.75) {
var _scaledTime = scaledTime - 2.25 / 2.75;
return 7.5625 * _scaledTime * _scaledTime + 0.9375;
} else {
var _scaledTime2 = scaledTime - 2.625 / 2.75;
return 7.5625 * _scaledTime2 * _scaledTime2 + 0.984375;
}
},
easeInBounce(t) {
return 1 - easeOutBounce(1 - t);
},
easeInOutBounce(t) {
if (t < 0.5) {
return easeInBounce(t * 2) * 0.5;
}
return easeOutBounce(t * 2 - 1) * 0.5 + 0.5;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment