Skip to content

Instantly share code, notes, and snippets.

@JoeKeikun
Created November 11, 2014 02:23
Show Gist options
  • Select an option

  • Save JoeKeikun/d0f23257bd415d1a6926 to your computer and use it in GitHub Desktop.

Select an option

Save JoeKeikun/d0f23257bd415d1a6926 to your computer and use it in GitHub Desktop.

Revisions

  1. JoeKeikun created this gist Nov 11, 2014.
    315 changes: 315 additions & 0 deletions timing function
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,315 @@
    var timingfunction = {};

    /**
    * linear 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.linear = function(p) {
    return p;
    };
    /**
    * swing 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.swing = function(p) {
    return .5 - Math.cos(p * Math.PI) / 2;
    };
    /**
    * easeInQuad 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeInQuad = function(p) {
    return Math.pow(p, 2);
    };
    /**
    * easeOutQuad 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeOutQuad = function(p) {
    return 1 - timingfunction.easeInQuad(1 - p);
    };
    /**
    * easeInOutQuad 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeInOutQuad = function(p) {
    return p < 0.5 ?
    timingfunction.easeInQuad(p * 2) / 2 :
    1 - timingfunction.easeInQuad(p * -2 + 2) / 2;
    };
    /**
    * easeInCubic 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeInCubic = function(p) {
    return Math.pow(p, 3);
    };
    /**
    * easeOutCubic 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeOutCubic = function(p) {
    return 1 - timingfunction.easeInCubic(1 - p);
    };
    /**
    * easeInOutCubic 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeInOutCubic = function(p) {
    return p < 0.5 ?
    timingfunction.easeInCubic(p * 2) / 2 :
    1 - timingfunction.easeInCubic(p * -2 + 2) / 2;
    };
    /**
    * easeInQuart 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeInQuart = function(p) {
    return Math.pow(p, 4);
    };
    /**
    * easeOutQuart 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeOutQuart = function(p) {
    return 1 - timingfunction.easeInQuart(1 - p);
    };
    /**
    * easeInOutQuart 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeInOutQuart = function(p) {
    return p < 0.5 ?
    timingfunction.easeInQuart(p * 2) / 2 :
    1 - timingfunction.easeInQuart(p * -2 + 2) / 2;
    };
    /**
    * easeInQuint 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeInQuint = function(p) {
    return Math.pow(p, 5);
    };
    /**
    * easeOutQuint 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeOutQuint = function(p) {
    return 1 - timingfunction.easeInQuint(1 - p);
    };
    /**
    * easeInOutQuint 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeInOutQuint = function(p) {
    return p < 0.5 ?
    timingfunction.easeInQuint(p * 2) / 2 :
    1 - timingfunction.easeInQuint(p * -2 + 2) / 2;
    };
    /**
    * easeInExpo 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeInExpo = function(p) {
    return Math.pow(p, 6);
    };
    /**
    * easeOutExpo 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeOutExpo = function(p) {
    return 1 - timingfunction.easeInExpo(1 - p);
    };
    /**
    * easeInOutExpo 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeInOutExpo = function(p) {
    return p < 0.5 ?
    timingfunction.easeInExpo(p * 2) / 2 :
    1 - timingfunction.easeInExpo(p * -2 + 2) / 2;
    };
    /**
    * easeInSine 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeInSine = function(p) {
    return 1 - Math.cos(p * Math.PI / 2);
    };
    /**
    * easeOutSine 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeOutSine = function(p) {
    return 1 - timingfunction.easeInSine(1 - p);
    };
    /**
    * easeInOutSine 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeInOutSine = function(p) {
    return p < 0.5 ?
    timingfunction.easeInSine(p * 2) / 2 :
    1 - timingfunction.easeInSine(p * -2 + 2) / 2;
    };
    /**
    * easeInCirc 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeInCirc = function(p) {
    return 1 - Math.sqrt(1 - p * p);
    };
    /**
    * easeOutCirc 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeOutCirc = function(p) {
    return 1 - timingfunction.easeInCirc(1 - p);
    };
    /**
    * easeInOutCirc 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeInOutCirc = function(p) {
    return p < 0.5 ?
    timingfunction.easeInCirc(p * 2) / 2 :
    1 - timingfunction.easeInCirc(p * -2 + 2) / 2;
    };
    /**
    * easeInElastic 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeInElastic = function(p) {
    return p === 0 || p === 1 ? p :
    -Math.pow(2, 8 * (p - 1)) * Math.sin(((p - 1) * 80 - 7.5) * Math.PI / 15);
    };
    /**
    * easeOutElastic 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeOutElastic = function(p) {
    return 1 - timingfunction.easeInElastic(1 - p);
    };
    /**
    * easeInOutElastic 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeInOutElastic = function(p) {
    return p < 0.5 ?
    timingfunction.easeInElastic(p * 2) / 2 :
    1 - timingfunction.easeInElastic(p * -2 + 2) / 2;
    };
    /**
    * easeInBack 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeInBack = function(p) {
    return p * p * (3 * p - 2);
    };
    /**
    * easeOutBack 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeOutBack = function(p) {
    return 1 - timingfunction.easeInBack(1 - p);
    };
    /**
    * easeInOutBack 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeInOutBack = function(p) {
    return p < 0.5 ?
    timingfunction.easeInBack(p * 2) / 2 :
    1 - timingfunction.easeInBack(p * -2 + 2) / 2;
    };
    /**
    * easeInBounce 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeInBounce = function(p) {
    var pow2,
    bounce = 4;

    while (p < ((pow2 = Math.pow(2, --bounce)) - 1) / 11) {};
    return 1 / Math.pow(4, 3 - bounce) - 7.5625 * Math.pow((pow2 * 3 - 2) / 22 - p, 2);
    };
    /**
    * easeOutBounce 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeOutBounce = function(p) {
    return 1 - timingfunction.easeInBounce(1 - p);
    };
    /**
    * easeInOutBounce 函数
    *
    * @param {Number} p 正常百分比值
    * @return {Number} 换算后的结果
    */
    timingfunction.easeInOutBounce = function(p) {
    return p < 0.5 ?
    timingfunction.easeInBounce(p * 2) / 2 :
    1 - timingfunction.easeInBounce(p * -2 + 2) / 2;
    };