375 lines
11 KiB
JavaScript
375 lines
11 KiB
JavaScript
/*!
|
|
* VERSION: 1.16.1
|
|
* DATE: 2018-08-27
|
|
* UPDATES AND DOCS AT: http://greensock.com
|
|
*
|
|
* @license Copyright (c) 2008-2019, GreenSock. All rights reserved.
|
|
* This work is subject to the terms at http://greensock.com/standard-license or for
|
|
* Club GreenSock members, the software agreement that was issued with your membership.
|
|
*
|
|
* @author: Jack Doyle, jack@greensock.com
|
|
**/
|
|
/* eslint-disable */
|
|
|
|
import { _gsScope, globals, Ease, Linear, Power0, Power1, Power2, Power3, Power4 } from "./TweenLite.js";
|
|
|
|
_gsScope._gsDefine("easing.Back", ["easing.Ease"], function() {
|
|
|
|
var w = (_gsScope.GreenSockGlobals || _gsScope),
|
|
gs = w.com.greensock,
|
|
_2PI = Math.PI * 2,
|
|
_HALF_PI = Math.PI / 2,
|
|
_class = gs._class,
|
|
_create = function(n, f) {
|
|
var C = _class("easing." + n, function(){}, true),
|
|
p = C.prototype = new Ease();
|
|
p.constructor = C;
|
|
p.getRatio = f;
|
|
return C;
|
|
},
|
|
_easeReg = Ease.register || function(){}, //put an empty function in place just as a safety measure in case someone loads an OLD version of TweenLite.js where Ease.register doesn't exist.
|
|
_wrap = function(name, EaseOut, EaseIn, EaseInOut, aliases) {
|
|
var C = _class("easing."+name, {
|
|
easeOut:new EaseOut(),
|
|
easeIn:new EaseIn(),
|
|
easeInOut:new EaseInOut()
|
|
}, true);
|
|
_easeReg(C, name);
|
|
return C;
|
|
},
|
|
EasePoint = function(time, value, next) {
|
|
this.t = time;
|
|
this.v = value;
|
|
if (next) {
|
|
this.next = next;
|
|
next.prev = this;
|
|
this.c = next.v - value;
|
|
this.gap = next.t - time;
|
|
}
|
|
},
|
|
|
|
//Back
|
|
_createBack = function(n, f) {
|
|
var C = _class("easing." + n, function(overshoot) {
|
|
this._p1 = (overshoot || overshoot === 0) ? overshoot : 1.70158;
|
|
this._p2 = this._p1 * 1.525;
|
|
}, true),
|
|
p = C.prototype = new Ease();
|
|
p.constructor = C;
|
|
p.getRatio = f;
|
|
p.config = function(overshoot) {
|
|
return new C(overshoot);
|
|
};
|
|
return C;
|
|
},
|
|
|
|
Back = _wrap("Back",
|
|
_createBack("BackOut", function(p) {
|
|
return ((p = p - 1) * p * ((this._p1 + 1) * p + this._p1) + 1);
|
|
}),
|
|
_createBack("BackIn", function(p) {
|
|
return p * p * ((this._p1 + 1) * p - this._p1);
|
|
}),
|
|
_createBack("BackInOut", function(p) {
|
|
return ((p *= 2) < 1) ? 0.5 * p * p * ((this._p2 + 1) * p - this._p2) : 0.5 * ((p -= 2) * p * ((this._p2 + 1) * p + this._p2) + 2);
|
|
})
|
|
),
|
|
|
|
|
|
//SlowMo
|
|
SlowMo = _class("easing.SlowMo", function(linearRatio, power, yoyoMode) {
|
|
power = (power || power === 0) ? power : 0.7;
|
|
if (linearRatio == null) {
|
|
linearRatio = 0.7;
|
|
} else if (linearRatio > 1) {
|
|
linearRatio = 1;
|
|
}
|
|
this._p = (linearRatio !== 1) ? power : 0;
|
|
this._p1 = (1 - linearRatio) / 2;
|
|
this._p2 = linearRatio;
|
|
this._p3 = this._p1 + this._p2;
|
|
this._calcEnd = (yoyoMode === true);
|
|
}, true),
|
|
p = SlowMo.prototype = new Ease(),
|
|
SteppedEase, ExpoScaleEase, RoughEase, _createElastic;
|
|
|
|
p.constructor = SlowMo;
|
|
p.getRatio = function(p) {
|
|
var r = p + (0.5 - p) * this._p;
|
|
if (p < this._p1) {
|
|
return this._calcEnd ? 1 - ((p = 1 - (p / this._p1)) * p) : r - ((p = 1 - (p / this._p1)) * p * p * p * r);
|
|
} else if (p > this._p3) {
|
|
return this._calcEnd ? (p === 1 ? 0 : 1 - (p = (p - this._p3) / this._p1) * p) : r + ((p - r) * (p = (p - this._p3) / this._p1) * p * p * p); //added p === 1 ? 0 to avoid floating point rounding errors from affecting the final value, like 1 - 0.7 = 0.30000000000000004 instead of 0.3
|
|
}
|
|
return this._calcEnd ? 1 : r;
|
|
};
|
|
SlowMo.ease = new SlowMo(0.7, 0.7);
|
|
|
|
p.config = SlowMo.config = function(linearRatio, power, yoyoMode) {
|
|
return new SlowMo(linearRatio, power, yoyoMode);
|
|
};
|
|
|
|
|
|
//SteppedEase
|
|
SteppedEase = _class("easing.SteppedEase", function(steps, immediateStart) {
|
|
steps = steps || 1;
|
|
this._p1 = 1 / steps;
|
|
this._p2 = steps + (immediateStart ? 0 : 1);
|
|
this._p3 = immediateStart ? 1 : 0;
|
|
}, true);
|
|
p = SteppedEase.prototype = new Ease();
|
|
p.constructor = SteppedEase;
|
|
p.getRatio = function(p) {
|
|
if (p < 0) {
|
|
p = 0;
|
|
} else if (p >= 1) {
|
|
p = 0.999999999;
|
|
}
|
|
return (((this._p2 * p) | 0) + this._p3) * this._p1;
|
|
};
|
|
p.config = SteppedEase.config = function(steps, immediateStart) {
|
|
return new SteppedEase(steps, immediateStart);
|
|
};
|
|
|
|
|
|
//ExpoScaleEase
|
|
ExpoScaleEase = _class("easing.ExpoScaleEase", function(start, end, ease) {
|
|
this._p1 = Math.log(end / start);
|
|
this._p2 = end - start;
|
|
this._p3 = start;
|
|
this._ease = ease;
|
|
}, true);
|
|
p = ExpoScaleEase.prototype = new Ease();
|
|
p.constructor = ExpoScaleEase;
|
|
p.getRatio = function(p) {
|
|
if (this._ease) {
|
|
p = this._ease.getRatio(p);
|
|
}
|
|
return (this._p3 * Math.exp(this._p1 * p) - this._p3) / this._p2;
|
|
};
|
|
p.config = ExpoScaleEase.config = function(start, end, ease) {
|
|
return new ExpoScaleEase(start, end, ease);
|
|
};
|
|
|
|
|
|
//RoughEase
|
|
RoughEase = _class("easing.RoughEase", function(vars) {
|
|
vars = vars || {};
|
|
var taper = vars.taper || "none",
|
|
a = [],
|
|
cnt = 0,
|
|
points = (vars.points || 20) | 0,
|
|
i = points,
|
|
randomize = (vars.randomize !== false),
|
|
clamp = (vars.clamp === true),
|
|
template = (vars.template instanceof Ease) ? vars.template : null,
|
|
strength = (typeof(vars.strength) === "number") ? vars.strength * 0.4 : 0.4,
|
|
x, y, bump, invX, obj, pnt;
|
|
while (--i > -1) {
|
|
x = randomize ? Math.random() : (1 / points) * i;
|
|
y = template ? template.getRatio(x) : x;
|
|
if (taper === "none") {
|
|
bump = strength;
|
|
} else if (taper === "out") {
|
|
invX = 1 - x;
|
|
bump = invX * invX * strength;
|
|
} else if (taper === "in") {
|
|
bump = x * x * strength;
|
|
} else if (x < 0.5) { //"both" (start)
|
|
invX = x * 2;
|
|
bump = invX * invX * 0.5 * strength;
|
|
} else { //"both" (end)
|
|
invX = (1 - x) * 2;
|
|
bump = invX * invX * 0.5 * strength;
|
|
}
|
|
if (randomize) {
|
|
y += (Math.random() * bump) - (bump * 0.5);
|
|
} else if (i % 2) {
|
|
y += bump * 0.5;
|
|
} else {
|
|
y -= bump * 0.5;
|
|
}
|
|
if (clamp) {
|
|
if (y > 1) {
|
|
y = 1;
|
|
} else if (y < 0) {
|
|
y = 0;
|
|
}
|
|
}
|
|
a[cnt++] = {x:x, y:y};
|
|
}
|
|
a.sort(function(a, b) {
|
|
return a.x - b.x;
|
|
});
|
|
|
|
pnt = new EasePoint(1, 1, null);
|
|
i = points;
|
|
while (--i > -1) {
|
|
obj = a[i];
|
|
pnt = new EasePoint(obj.x, obj.y, pnt);
|
|
}
|
|
|
|
this._prev = new EasePoint(0, 0, (pnt.t !== 0) ? pnt : pnt.next);
|
|
}, true);
|
|
p = RoughEase.prototype = new Ease();
|
|
p.constructor = RoughEase;
|
|
p.getRatio = function(p) {
|
|
var pnt = this._prev;
|
|
if (p > pnt.t) {
|
|
while (pnt.next && p >= pnt.t) {
|
|
pnt = pnt.next;
|
|
}
|
|
pnt = pnt.prev;
|
|
} else {
|
|
while (pnt.prev && p <= pnt.t) {
|
|
pnt = pnt.prev;
|
|
}
|
|
}
|
|
this._prev = pnt;
|
|
return (pnt.v + ((p - pnt.t) / pnt.gap) * pnt.c);
|
|
};
|
|
p.config = function(vars) {
|
|
return new RoughEase(vars);
|
|
};
|
|
RoughEase.ease = new RoughEase();
|
|
|
|
|
|
//Bounce
|
|
_wrap("Bounce",
|
|
_create("BounceOut", function(p) {
|
|
if (p < 1 / 2.75) {
|
|
return 7.5625 * p * p;
|
|
} else if (p < 2 / 2.75) {
|
|
return 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;
|
|
} else if (p < 2.5 / 2.75) {
|
|
return 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;
|
|
}
|
|
return 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;
|
|
}),
|
|
_create("BounceIn", function(p) {
|
|
if ((p = 1 - p) < 1 / 2.75) {
|
|
return 1 - (7.5625 * p * p);
|
|
} else if (p < 2 / 2.75) {
|
|
return 1 - (7.5625 * (p -= 1.5 / 2.75) * p + 0.75);
|
|
} else if (p < 2.5 / 2.75) {
|
|
return 1 - (7.5625 * (p -= 2.25 / 2.75) * p + 0.9375);
|
|
}
|
|
return 1 - (7.5625 * (p -= 2.625 / 2.75) * p + 0.984375);
|
|
}),
|
|
_create("BounceInOut", function(p) {
|
|
var invert = (p < 0.5);
|
|
if (invert) {
|
|
p = 1 - (p * 2);
|
|
} else {
|
|
p = (p * 2) - 1;
|
|
}
|
|
if (p < 1 / 2.75) {
|
|
p = 7.5625 * p * p;
|
|
} else if (p < 2 / 2.75) {
|
|
p = 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;
|
|
} else if (p < 2.5 / 2.75) {
|
|
p = 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;
|
|
} else {
|
|
p = 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;
|
|
}
|
|
return invert ? (1 - p) * 0.5 : p * 0.5 + 0.5;
|
|
})
|
|
);
|
|
|
|
|
|
//CIRC
|
|
_wrap("Circ",
|
|
_create("CircOut", function(p) {
|
|
return Math.sqrt(1 - (p = p - 1) * p);
|
|
}),
|
|
_create("CircIn", function(p) {
|
|
return -(Math.sqrt(1 - (p * p)) - 1);
|
|
}),
|
|
_create("CircInOut", function(p) {
|
|
return ((p*=2) < 1) ? -0.5 * (Math.sqrt(1 - p * p) - 1) : 0.5 * (Math.sqrt(1 - (p -= 2) * p) + 1);
|
|
})
|
|
);
|
|
|
|
|
|
//Elastic
|
|
_createElastic = function(n, f, def) {
|
|
var C = _class("easing." + n, function(amplitude, period) {
|
|
this._p1 = (amplitude >= 1) ? amplitude : 1; //note: if amplitude is < 1, we simply adjust the period for a more natural feel. Otherwise the math doesn't work right and the curve starts at 1.
|
|
this._p2 = (period || def) / (amplitude < 1 ? amplitude : 1);
|
|
this._p3 = this._p2 / _2PI * (Math.asin(1 / this._p1) || 0);
|
|
this._p2 = _2PI / this._p2; //precalculate to optimize
|
|
}, true),
|
|
p = C.prototype = new Ease();
|
|
p.constructor = C;
|
|
p.getRatio = f;
|
|
p.config = function(amplitude, period) {
|
|
return new C(amplitude, period);
|
|
};
|
|
return C;
|
|
};
|
|
_wrap("Elastic",
|
|
_createElastic("ElasticOut", function(p) {
|
|
return this._p1 * Math.pow(2, -10 * p) * Math.sin( (p - this._p3) * this._p2 ) + 1;
|
|
}, 0.3),
|
|
_createElastic("ElasticIn", function(p) {
|
|
return -(this._p1 * Math.pow(2, 10 * (p -= 1)) * Math.sin( (p - this._p3) * this._p2 ));
|
|
}, 0.3),
|
|
_createElastic("ElasticInOut", function(p) {
|
|
return ((p *= 2) < 1) ? -0.5 * (this._p1 * Math.pow(2, 10 * (p -= 1)) * Math.sin( (p - this._p3) * this._p2)) : this._p1 * Math.pow(2, -10 *(p -= 1)) * Math.sin( (p - this._p3) * this._p2 ) * 0.5 + 1;
|
|
}, 0.45)
|
|
);
|
|
|
|
|
|
//Expo
|
|
_wrap("Expo",
|
|
_create("ExpoOut", function(p) {
|
|
return 1 - Math.pow(2, -10 * p);
|
|
}),
|
|
_create("ExpoIn", function(p) {
|
|
return Math.pow(2, 10 * (p - 1)) - 0.001;
|
|
}),
|
|
_create("ExpoInOut", function(p) {
|
|
return ((p *= 2) < 1) ? 0.5 * Math.pow(2, 10 * (p - 1)) : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));
|
|
})
|
|
);
|
|
|
|
|
|
//Sine
|
|
_wrap("Sine",
|
|
_create("SineOut", function(p) {
|
|
return Math.sin(p * _HALF_PI);
|
|
}),
|
|
_create("SineIn", function(p) {
|
|
return -Math.cos(p * _HALF_PI) + 1;
|
|
}),
|
|
_create("SineInOut", function(p) {
|
|
return -0.5 * (Math.cos(Math.PI * p) - 1);
|
|
})
|
|
);
|
|
|
|
_class("easing.EaseLookup", {
|
|
find:function(s) {
|
|
return Ease.map[s];
|
|
}
|
|
}, true);
|
|
|
|
//register the non-standard eases
|
|
_easeReg(w.SlowMo, "SlowMo", "ease,");
|
|
_easeReg(RoughEase, "RoughEase", "ease,");
|
|
_easeReg(SteppedEase, "SteppedEase", "ease,");
|
|
|
|
return Back;
|
|
|
|
}, true);
|
|
|
|
export var Back = globals.Back;
|
|
export var Elastic = globals.Elastic;
|
|
export var Bounce = globals.Bounce;
|
|
export var RoughEase = globals.RoughEase;
|
|
export var SlowMo = globals.SlowMo;
|
|
export var SteppedEase = globals.SteppedEase;
|
|
export var Circ = globals.Circ;
|
|
export var Expo = globals.Expo;
|
|
export var Sine = globals.Sine;
|
|
export var ExpoScaleEase = globals.ExpoScaleEase;
|
|
export { Linear, Power0, Power1, Power2, Power3, Power4 }; |