NPM/Bower and UMD support.
- Supports `require()` and `define()` style loading. - Is available on Bower through Git tags. Not yet via NPM. (run `npm publish` inside the project to do so) - README updated with hint of usability with module loaders In the code: - Implemented UMD method, using AMD in first instance. - Error is thrown is the root KuteJS could not be found. What is missing: - Sub-modules should export their factory rather than doing this on their own.
This commit is contained in:
parent
37348c3609
commit
e2aa72e14b
32
README.md
32
README.md
|
@ -6,6 +6,13 @@ A minimal <b>native Javascript</b> tweening engine with <b>jQuery</b> plugin, fo
|
||||||
# CDN
|
# CDN
|
||||||
Thanks to jsdelivr, we have CDN link <a target="_blank" href="http://www.jsdelivr.com/#!kute.js">here</a>.
|
Thanks to jsdelivr, we have CDN link <a target="_blank" href="http://www.jsdelivr.com/#!kute.js">here</a>.
|
||||||
|
|
||||||
|
# NPM/Bower
|
||||||
|
You can install this through NPM or bower respectively:
|
||||||
|
|
||||||
|
$ npm install kute.js
|
||||||
|
# or
|
||||||
|
$ bower install kute.js
|
||||||
|
|
||||||
# Basic Usage
|
# Basic Usage
|
||||||
At a glance, you can write one line and you're done.
|
At a glance, you can write one line and you're done.
|
||||||
```javascript
|
```javascript
|
||||||
|
@ -16,6 +23,23 @@ new KUTE.fromTo('selector', fromValues, toValues, options);
|
||||||
$('selector').KUTE('fromTo', fromValues, toValues, options);
|
$('selector').KUTE('fromTo', fromValues, toValues, options);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
# CommonJS/AMD support
|
||||||
|
You can use this module through any of the common javascript module systems. For instance:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// NodeJS/CommonJS style
|
||||||
|
var kute = require("kute.js");
|
||||||
|
// Add Bezier/Easing...
|
||||||
|
require("kute.js/kute-bezier");
|
||||||
|
|
||||||
|
// AMD
|
||||||
|
define([
|
||||||
|
"kute.js",
|
||||||
|
"kute.js/kute-bezier.js"
|
||||||
|
], function(KUTE){
|
||||||
|
// ...
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
# Advanced Usage
|
# Advanced Usage
|
||||||
Quite easily, you can write 'bit more lines and you're making the earth go round.
|
Quite easily, you can write 'bit more lines and you're making the earth go round.
|
||||||
|
@ -26,9 +50,9 @@ KUTE.fromTo(el, {
|
||||||
{ translate: 0, opacity: 1 }, // fromValues
|
{ translate: 0, opacity: 1 }, // fromValues
|
||||||
{ translate: 150, opacity: 0 }, // toValues
|
{ translate: 150, opacity: 0 }, // toValues
|
||||||
{ duration: 500, delay: 0, easing : 'exponentialInOut', // basic options
|
{ duration: 500, delay: 0, easing : 'exponentialInOut', // basic options
|
||||||
|
|
||||||
//callbacks
|
//callbacks
|
||||||
start: functionOne, // run function when tween starts
|
start: functionOne, // run function when tween starts
|
||||||
complete: functionTwo, // run function when tween animation is finished
|
complete: functionTwo, // run function when tween animation is finished
|
||||||
update: functionThree // run function while tween running
|
update: functionThree // run function while tween running
|
||||||
stop: functionThree // run function when tween stopped
|
stop: functionThree // run function when tween stopped
|
||||||
|
@ -39,7 +63,7 @@ KUTE.fromTo(el, {
|
||||||
);
|
);
|
||||||
```
|
```
|
||||||
|
|
||||||
# Demo
|
# Demo
|
||||||
For documentation, examples and other cool tips, check the <a href="http://thednp.github.io/kute.js/">demo</a>.
|
For documentation, examples and other cool tips, check the <a href="http://thednp.github.io/kute.js/">demo</a>.
|
||||||
|
|
||||||
#jQuery Plugin
|
#jQuery Plugin
|
||||||
|
@ -51,7 +75,7 @@ That's right, there you have it, just a few bits of code to bridge the awesome `
|
||||||
* computes properties' values properly according to their measurement unit (px,%,deg,etc)
|
* computes properties' values properly according to their measurement unit (px,%,deg,etc)
|
||||||
* properly handles cross browser 3D `transform` with `perspective` and `perspective-origin` for element or it's parent
|
* properly handles cross browser 3D `transform` with `perspective` and `perspective-origin` for element or it's parent
|
||||||
* converts `HEX` colors to `RGB` and tweens the numeric values, then ALWAYS updates color via `RGB`
|
* converts `HEX` colors to `RGB` and tweens the numeric values, then ALWAYS updates color via `RGB`
|
||||||
* properly replaces `top`, `centered` or any other background position with proper value to be able to tween
|
* properly replaces `top`, `centered` or any other background position with proper value to be able to tween
|
||||||
* for most supported properties it reads the current element computed style property value as initial value (via `currentStyle || getComputedStyle`)
|
* for most supported properties it reads the current element computed style property value as initial value (via `currentStyle || getComputedStyle`)
|
||||||
* because it can read properties values from previous tween animations, KUTE.js can do some awesome chaining with it's `.to()` method
|
* because it can read properties values from previous tween animations, KUTE.js can do some awesome chaining with it's `.to()` method
|
||||||
* allows you to add many callbacks: `start`, `update`, `complete`, `pause`, `stop`, and they can be set as tween options
|
* allows you to add many callbacks: `start`, `update`, `complete`, `pause`, `stop`, and they can be set as tween options
|
||||||
|
|
30
bower.json
Normal file
30
bower.json
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
{
|
||||||
|
"name": "KUTE.js",
|
||||||
|
"version": "0.9.4",
|
||||||
|
"homepage": "http://thednp.github.io/kute.js",
|
||||||
|
"authors": [
|
||||||
|
"thednp"
|
||||||
|
],
|
||||||
|
"description": "A minimal Native Javascript animation engine with jQuery plugin.",
|
||||||
|
"main": "kute.js",
|
||||||
|
"moduleType": [
|
||||||
|
"amd",
|
||||||
|
"globals",
|
||||||
|
"node"
|
||||||
|
],
|
||||||
|
"keywords": [
|
||||||
|
"animations",
|
||||||
|
"native-javascript",
|
||||||
|
"kute.js",
|
||||||
|
"tweening",
|
||||||
|
"engine"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"ignore": [
|
||||||
|
"**/.*",
|
||||||
|
"node_modules",
|
||||||
|
"bower_components",
|
||||||
|
"test",
|
||||||
|
"tests"
|
||||||
|
]
|
||||||
|
}
|
301
kute-bezier.js
301
kute-bezier.js
|
@ -6,154 +6,173 @@
|
||||||
* Licensed under MIT-License
|
* Licensed under MIT-License
|
||||||
*/
|
*/
|
||||||
|
|
||||||
KUTE.Ease = {};
|
(function(kute_ea){
|
||||||
|
// Obtain a reference to the base KUTE.
|
||||||
KUTE.Ease.bezier = function(mX1, mY1, mX2, mY2) {
|
// Since KUTE supports a variety of module systems,
|
||||||
return _bz.pB(mX1, mY1, mX2, mY2);
|
// we need to pick up which one to use.
|
||||||
};
|
if(define == "function") {
|
||||||
|
define(["./kute.js"], function(KUTE){ kute_ea(KUTE); return KUTE; });
|
||||||
var _bz = KUTE.Ease.bezier.prototype;
|
} else if(typeof module == "object" && typeof require == "function") {
|
||||||
|
// We assume, that require() is sync.
|
||||||
// These values are established by empiricism with tests (tradeoff: performance VS precision)
|
var KUTE = require("./kute.js");
|
||||||
_bz.ni = 4; // NEWTON_ITERATIONS
|
kute_ea(KUTE);
|
||||||
_bz.nms = 0.001; // NEWTON_MIN_SLOPE
|
// Export the modified one. Not really required, but convenient.
|
||||||
_bz.sp = 0.0000001; // SUBDIVISION_PRECISION
|
module.exports = KUTE;
|
||||||
_bz.smi = 10, // SUBDIVISION_MAX_ITERATIONS
|
} else if(typeof root.KUTE != "undefined") {
|
||||||
|
kute_ea(root.KUTE);
|
||||||
_bz.ksts = 11; // k Spline Table Size
|
|
||||||
_bz.ksss = 1.0 / (_bz.ksts - 1.0); // k Sample Step Size
|
|
||||||
|
|
||||||
_bz.f32as = 'Float32Array' in window; // float32ArraySupported
|
|
||||||
_bz.msv = _bz.f32as ? new Float32Array (_bz.ksts) : new Array (_bz.ksts); // m Sample Values
|
|
||||||
|
|
||||||
_bz.A = function(aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; };
|
|
||||||
_bz.B = function(aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; };
|
|
||||||
_bz.C = function(aA1) { return 3.0 * aA1; };
|
|
||||||
|
|
||||||
_bz.r = {};
|
|
||||||
_bz.pB = function (mX1, mY1, mX2, mY2) {
|
|
||||||
this._p = false; var self = this;
|
|
||||||
|
|
||||||
_bz.r = function(aX){
|
|
||||||
if (!self._p) _bz.pc(mX1, mX2, mY1, mY2);
|
|
||||||
if (mX1 === mY1 && mX2 === mY2) return aX;
|
|
||||||
|
|
||||||
if (aX === 0) return 0;
|
|
||||||
if (aX === 1) return 1;
|
|
||||||
return _bz.cB(_bz.gx(aX, mX1, mX2), mY1, mY2);
|
|
||||||
};
|
|
||||||
return _bz.r;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.
|
|
||||||
_bz.cB = function(aT, aA1, aA2) { // calc Bezier
|
|
||||||
return ((_bz.A(aA1, aA2)*aT + _bz.B(aA1, aA2))*aT + _bz.C(aA1))*aT;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.
|
|
||||||
_bz.gS = function (aT, aA1, aA2) { // getSlope
|
|
||||||
return 3.0 * _bz.A(aA1, aA2)*aT*aT + 2.0 * _bz.B(aA1, aA2) * aT + _bz.C(aA1);
|
|
||||||
};
|
|
||||||
|
|
||||||
_bz.bS = function(a, aA, aB, mX1, mX2) { // binary Subdivide
|
|
||||||
var x, t, i = 0, j = _bz.sp, y = _bz.smi;
|
|
||||||
do {
|
|
||||||
t = aA + (aB - aA) / 2.0;
|
|
||||||
x = _bz.cB(t, mX1, mX2) - a;
|
|
||||||
if (x > 0.0) {
|
|
||||||
aB = t;
|
|
||||||
} else {
|
|
||||||
aA = t;
|
|
||||||
}
|
|
||||||
} while (Math.abs(x) > j && ++i < y);
|
|
||||||
return t;
|
|
||||||
};
|
|
||||||
|
|
||||||
_bz.nri = function (aX, agt, mX1, mX2) { // newton Raphs on Iterate
|
|
||||||
var i = 0, j = _bz.ni;
|
|
||||||
for (i; i < j; ++i) {
|
|
||||||
var cs = _bz.gS(agt, mX1, mX2);
|
|
||||||
if (cs === 0.0) return agt;
|
|
||||||
var x = _bz.cB(agt, mX1, mX2) - aX;
|
|
||||||
agt -= x / cs;
|
|
||||||
}
|
|
||||||
return agt;
|
|
||||||
};
|
|
||||||
|
|
||||||
_bz.csv = function (mX1, mX2) { // calc Sample Values
|
|
||||||
var i = 0, j = _bz.ksts;
|
|
||||||
for (i; i < j; ++i) {
|
|
||||||
_bz.msv[i] = _bz.cB(i * _bz.ksss, mX1, mX2);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
_bz.gx = function (aX,mX1,mX2) { //get to X
|
|
||||||
var iS = 0.0, cs = 1, ls = _bz.ksts - 1;
|
|
||||||
|
|
||||||
for (; cs != ls && _bz.msv[cs] <= aX; ++cs) {
|
|
||||||
iS += _bz.ksss;
|
|
||||||
}
|
|
||||||
--cs;
|
|
||||||
|
|
||||||
// Interpolate to provide an initial guess for t
|
|
||||||
var dist = (aX - _bz.msv[cs]) / (_bz.msv[cs+1] - _bz.msv[cs]),
|
|
||||||
gt = iS + dist * _bz.ksss,
|
|
||||||
ins = _bz.gS(gt, mX1, mX2),
|
|
||||||
fiS = iS + _bz.ksss;
|
|
||||||
|
|
||||||
if (ins >= _bz.nms) {
|
|
||||||
return _bz.nri(aX, gt, mX1, mX2);
|
|
||||||
} else if (ins === 0.0) {
|
|
||||||
return gt;
|
|
||||||
} else {
|
} else {
|
||||||
return _bz.bS(aX, iS, fiS, mX1, mX2);
|
throw new Error("KUTE.js Bezier/Easing depends on KUTE.js. Read the docs for more info.")
|
||||||
}
|
}
|
||||||
};
|
})(function(KUTE){
|
||||||
|
KUTE.Ease = {};
|
||||||
|
|
||||||
_bz.pc = function(mX1, mX2, mY1, mY2) {
|
KUTE.Ease.bezier = function(mX1, mY1, mX2, mY2) {
|
||||||
this._p = true;
|
return _bz.pB(mX1, mY1, mX2, mY2);
|
||||||
if (mX1 != mY1 || mX2 != mY2)
|
};
|
||||||
_bz.csv(mX1, mX2);
|
|
||||||
};
|
|
||||||
|
|
||||||
// predefined bezier based easings, can be accessed via string, eg 'easeIn' or 'easeInOutQuart'
|
|
||||||
// _easings = ["linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInExpo","easeOutExpo","easeInOutExpo","slowMo","slowMo1","slowMo2"],
|
|
||||||
KUTE.Ease.easeIn = function(){ return _bz.pB(0.42, 0.0, 1.00, 1.0); };
|
|
||||||
KUTE.Ease.easeOut = function(){ return _bz.pB(0.00, 0.0, 0.58, 1.0); };
|
|
||||||
KUTE.Ease.easeInOut = function(){ return _bz.pB(0.50, 0.16, 0.49, 0.86); };
|
|
||||||
|
|
||||||
KUTE.Ease.easeInSine = function(){ return _bz.pB(0.47, 0, 0.745, 0.715); };
|
|
||||||
KUTE.Ease.easeOutSine = function(){ return _bz.pB(0.39, 0.575, 0.565, 1); };
|
|
||||||
KUTE.Ease.easeInOutSine = function(){ return _bz.pB(0.445, 0.05, 0.55, 0.95); };
|
|
||||||
|
|
||||||
KUTE.Ease.easeInQuad = function () { return _bz.pB(0.550, 0.085, 0.680, 0.530); };
|
var _bz = KUTE.Ease.bezier.prototype;
|
||||||
KUTE.Ease.easeOutQuad = function () { return _bz.pB(0.250, 0.460, 0.450, 0.940); };
|
|
||||||
KUTE.Ease.easeInOutQuad = function () { return _bz.pB(0.455, 0.030, 0.515, 0.955); };
|
|
||||||
|
|
||||||
KUTE.Ease.easeInCubic = function () { return _bz.pB(0.55, 0.055, 0.675, 0.19); };
|
// These values are established by empiricism with tests (tradeoff: performance VS precision)
|
||||||
KUTE.Ease.easeOutCubic = function () { return _bz.pB(0.215, 0.61, 0.355, 1); };
|
_bz.ni = 4; // NEWTON_ITERATIONS
|
||||||
KUTE.Ease.easeInOutCubic = function () { return _bz.pB(0.645, 0.045, 0.355, 1); };
|
_bz.nms = 0.001; // NEWTON_MIN_SLOPE
|
||||||
|
_bz.sp = 0.0000001; // SUBDIVISION_PRECISION
|
||||||
|
_bz.smi = 10, // SUBDIVISION_MAX_ITERATIONS
|
||||||
|
|
||||||
KUTE.Ease.easeInQuart = function () { return _bz.pB(0.895, 0.03, 0.685, 0.22); };
|
_bz.ksts = 11; // k Spline Table Size
|
||||||
KUTE.Ease.easeOutQuart = function () { return _bz.pB(0.165, 0.84, 0.44, 1); };
|
_bz.ksss = 1.0 / (_bz.ksts - 1.0); // k Sample Step Size
|
||||||
KUTE.Ease.easeInOutQuart = function () { return _bz.pB(0.77, 0, 0.175, 1); };
|
|
||||||
|
|
||||||
KUTE.Ease.easeInQuint = function(){ return _bz.pB(0.755, 0.05, 0.855, 0.06); };
|
_bz.f32as = 'Float32Array' in window; // float32ArraySupported
|
||||||
KUTE.Ease.easeOutQuint = function(){ return _bz.pB(0.23, 1, 0.32, 1); };
|
_bz.msv = _bz.f32as ? new Float32Array (_bz.ksts) : new Array (_bz.ksts); // m Sample Values
|
||||||
KUTE.Ease.easeInOutQuint = function(){ return _bz.pB(0.86, 0, 0.07, 1); };
|
|
||||||
|
|
||||||
KUTE.Ease.easeInExpo = function(){ return _bz.pB(0.95, 0.05, 0.795, 0.035); };
|
|
||||||
KUTE.Ease.easeOutExpo = function(){ return _bz.pB(0.19, 1, 0.22, 1); };
|
|
||||||
KUTE.Ease.easeInOutExpo = function(){ return _bz.pB(1, 0, 0, 1); };
|
|
||||||
|
|
||||||
KUTE.Ease.easeInCirc = function(){ return _bz.pB(0.6, 0.04, 0.98, 0.335); };
|
_bz.A = function(aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; };
|
||||||
KUTE.Ease.easeOutCirc = function(){ return _bz.pB(0.075, 0.82, 0.165, 1); };
|
_bz.B = function(aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; };
|
||||||
KUTE.Ease.easeInOutCirc = function(){ return _bz.pB(0.785, 0.135, 0.15, 0.86); };
|
_bz.C = function(aA1) { return 3.0 * aA1; };
|
||||||
|
|
||||||
KUTE.Ease.easeInBack = function(){ return _bz.pB(0.600, -0.280, 0.735, 0.045); };
|
_bz.r = {};
|
||||||
KUTE.Ease.easeOutBack = function(){ return _bz.pB(0.175, 0.885, 0.320, 1.275); };
|
_bz.pB = function (mX1, mY1, mX2, mY2) {
|
||||||
KUTE.Ease.easeInOutBack = function(){ return _bz.pB(0.68, -0.55, 0.265, 1.55); };
|
this._p = false; var self = this;
|
||||||
|
|
||||||
KUTE.Ease.slowMo = function(){ return _bz.pB(0.000, 0.500, 1.000, 0.500); };
|
_bz.r = function(aX){
|
||||||
KUTE.Ease.slowMo1 = function(){ return _bz.pB(0.000, 0.700, 1.000, 0.300); };
|
if (!self._p) _bz.pc(mX1, mX2, mY1, mY2);
|
||||||
KUTE.Ease.slowMo2 = function(){ return _bz.pB(0.000, 0.900, 1.000, 0.100); };
|
if (mX1 === mY1 && mX2 === mY2) return aX;
|
||||||
|
|
||||||
|
if (aX === 0) return 0;
|
||||||
|
if (aX === 1) return 1;
|
||||||
|
return _bz.cB(_bz.gx(aX, mX1, mX2), mY1, mY2);
|
||||||
|
};
|
||||||
|
return _bz.r;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.
|
||||||
|
_bz.cB = function(aT, aA1, aA2) { // calc Bezier
|
||||||
|
return ((_bz.A(aA1, aA2)*aT + _bz.B(aA1, aA2))*aT + _bz.C(aA1))*aT;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.
|
||||||
|
_bz.gS = function (aT, aA1, aA2) { // getSlope
|
||||||
|
return 3.0 * _bz.A(aA1, aA2)*aT*aT + 2.0 * _bz.B(aA1, aA2) * aT + _bz.C(aA1);
|
||||||
|
};
|
||||||
|
|
||||||
|
_bz.bS = function(a, aA, aB, mX1, mX2) { // binary Subdivide
|
||||||
|
var x, t, i = 0, j = _bz.sp, y = _bz.smi;
|
||||||
|
do {
|
||||||
|
t = aA + (aB - aA) / 2.0;
|
||||||
|
x = _bz.cB(t, mX1, mX2) - a;
|
||||||
|
if (x > 0.0) {
|
||||||
|
aB = t;
|
||||||
|
} else {
|
||||||
|
aA = t;
|
||||||
|
}
|
||||||
|
} while (Math.abs(x) > j && ++i < y);
|
||||||
|
return t;
|
||||||
|
};
|
||||||
|
|
||||||
|
_bz.nri = function (aX, agt, mX1, mX2) { // newton Raphs on Iterate
|
||||||
|
var i = 0, j = _bz.ni;
|
||||||
|
for (i; i < j; ++i) {
|
||||||
|
var cs = _bz.gS(agt, mX1, mX2);
|
||||||
|
if (cs === 0.0) return agt;
|
||||||
|
var x = _bz.cB(agt, mX1, mX2) - aX;
|
||||||
|
agt -= x / cs;
|
||||||
|
}
|
||||||
|
return agt;
|
||||||
|
};
|
||||||
|
|
||||||
|
_bz.csv = function (mX1, mX2) { // calc Sample Values
|
||||||
|
var i = 0, j = _bz.ksts;
|
||||||
|
for (i; i < j; ++i) {
|
||||||
|
_bz.msv[i] = _bz.cB(i * _bz.ksss, mX1, mX2);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
_bz.gx = function (aX,mX1,mX2) { //get to X
|
||||||
|
var iS = 0.0, cs = 1, ls = _bz.ksts - 1;
|
||||||
|
|
||||||
|
for (; cs != ls && _bz.msv[cs] <= aX; ++cs) {
|
||||||
|
iS += _bz.ksss;
|
||||||
|
}
|
||||||
|
--cs;
|
||||||
|
|
||||||
|
// Interpolate to provide an initial guess for t
|
||||||
|
var dist = (aX - _bz.msv[cs]) / (_bz.msv[cs+1] - _bz.msv[cs]),
|
||||||
|
gt = iS + dist * _bz.ksss,
|
||||||
|
ins = _bz.gS(gt, mX1, mX2),
|
||||||
|
fiS = iS + _bz.ksss;
|
||||||
|
|
||||||
|
if (ins >= _bz.nms) {
|
||||||
|
return _bz.nri(aX, gt, mX1, mX2);
|
||||||
|
} else if (ins === 0.0) {
|
||||||
|
return gt;
|
||||||
|
} else {
|
||||||
|
return _bz.bS(aX, iS, fiS, mX1, mX2);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
_bz.pc = function(mX1, mX2, mY1, mY2) {
|
||||||
|
this._p = true;
|
||||||
|
if (mX1 != mY1 || mX2 != mY2)
|
||||||
|
_bz.csv(mX1, mX2);
|
||||||
|
};
|
||||||
|
|
||||||
|
// predefined bezier based easings, can be accessed via string, eg 'easeIn' or 'easeInOutQuart'
|
||||||
|
// _easings = ["linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInExpo","easeOutExpo","easeInOutExpo","slowMo","slowMo1","slowMo2"],
|
||||||
|
KUTE.Ease.easeIn = function(){ return _bz.pB(0.42, 0.0, 1.00, 1.0); };
|
||||||
|
KUTE.Ease.easeOut = function(){ return _bz.pB(0.00, 0.0, 0.58, 1.0); };
|
||||||
|
KUTE.Ease.easeInOut = function(){ return _bz.pB(0.50, 0.16, 0.49, 0.86); };
|
||||||
|
|
||||||
|
KUTE.Ease.easeInSine = function(){ return _bz.pB(0.47, 0, 0.745, 0.715); };
|
||||||
|
KUTE.Ease.easeOutSine = function(){ return _bz.pB(0.39, 0.575, 0.565, 1); };
|
||||||
|
KUTE.Ease.easeInOutSine = function(){ return _bz.pB(0.445, 0.05, 0.55, 0.95); };
|
||||||
|
|
||||||
|
KUTE.Ease.easeInQuad = function () { return _bz.pB(0.550, 0.085, 0.680, 0.530); };
|
||||||
|
KUTE.Ease.easeOutQuad = function () { return _bz.pB(0.250, 0.460, 0.450, 0.940); };
|
||||||
|
KUTE.Ease.easeInOutQuad = function () { return _bz.pB(0.455, 0.030, 0.515, 0.955); };
|
||||||
|
|
||||||
|
KUTE.Ease.easeInCubic = function () { return _bz.pB(0.55, 0.055, 0.675, 0.19); };
|
||||||
|
KUTE.Ease.easeOutCubic = function () { return _bz.pB(0.215, 0.61, 0.355, 1); };
|
||||||
|
KUTE.Ease.easeInOutCubic = function () { return _bz.pB(0.645, 0.045, 0.355, 1); };
|
||||||
|
|
||||||
|
KUTE.Ease.easeInQuart = function () { return _bz.pB(0.895, 0.03, 0.685, 0.22); };
|
||||||
|
KUTE.Ease.easeOutQuart = function () { return _bz.pB(0.165, 0.84, 0.44, 1); };
|
||||||
|
KUTE.Ease.easeInOutQuart = function () { return _bz.pB(0.77, 0, 0.175, 1); };
|
||||||
|
|
||||||
|
KUTE.Ease.easeInQuint = function(){ return _bz.pB(0.755, 0.05, 0.855, 0.06); };
|
||||||
|
KUTE.Ease.easeOutQuint = function(){ return _bz.pB(0.23, 1, 0.32, 1); };
|
||||||
|
KUTE.Ease.easeInOutQuint = function(){ return _bz.pB(0.86, 0, 0.07, 1); };
|
||||||
|
|
||||||
|
KUTE.Ease.easeInExpo = function(){ return _bz.pB(0.95, 0.05, 0.795, 0.035); };
|
||||||
|
KUTE.Ease.easeOutExpo = function(){ return _bz.pB(0.19, 1, 0.22, 1); };
|
||||||
|
KUTE.Ease.easeInOutExpo = function(){ return _bz.pB(1, 0, 0, 1); };
|
||||||
|
|
||||||
|
KUTE.Ease.easeInCirc = function(){ return _bz.pB(0.6, 0.04, 0.98, 0.335); };
|
||||||
|
KUTE.Ease.easeOutCirc = function(){ return _bz.pB(0.075, 0.82, 0.165, 1); };
|
||||||
|
KUTE.Ease.easeInOutCirc = function(){ return _bz.pB(0.785, 0.135, 0.15, 0.86); };
|
||||||
|
|
||||||
|
KUTE.Ease.easeInBack = function(){ return _bz.pB(0.600, -0.280, 0.735, 0.045); };
|
||||||
|
KUTE.Ease.easeOutBack = function(){ return _bz.pB(0.175, 0.885, 0.320, 1.275); };
|
||||||
|
KUTE.Ease.easeInOutBack = function(){ return _bz.pB(0.68, -0.55, 0.265, 1.55); };
|
||||||
|
|
||||||
|
KUTE.Ease.slowMo = function(){ return _bz.pB(0.000, 0.500, 1.000, 0.500); };
|
||||||
|
KUTE.Ease.slowMo1 = function(){ return _bz.pB(0.000, 0.700, 1.000, 0.300); };
|
||||||
|
KUTE.Ease.slowMo2 = function(){ return _bz.pB(0.000, 0.900, 1.000, 0.100); };
|
||||||
|
});
|
||||||
|
|
|
@ -4,23 +4,44 @@
|
||||||
* Licensed under MIT-License
|
* Licensed under MIT-License
|
||||||
*/
|
*/
|
||||||
|
|
||||||
(function($) {
|
(function(kutejQuery){
|
||||||
$.fn.KUTE = function( method, start, end, ops ) { // method can be Animate(), fromTo(), to(), stop(), start(), chain(), pause()
|
// We need to require the root KUTE and jQuery.
|
||||||
|
if(define == "function") {
|
||||||
|
define(["./kute.js", "jQuery"], function(KUTE, $){
|
||||||
|
kutejQuery($, KUTE);
|
||||||
|
return KUTE;
|
||||||
|
});
|
||||||
|
} else if(typeof module == "object" && typeof require == "function") {
|
||||||
|
// We assume, that require() is sync.
|
||||||
|
var KUTE = require("./kute.js");
|
||||||
|
var $ = require("jQuery");
|
||||||
|
kutejQuery($, KUTE);
|
||||||
|
// Export the modified one. Not really required, but convenient.
|
||||||
|
module.exports = $;
|
||||||
|
} else if(typeof root.KUTE != "undefined") {
|
||||||
|
// jQuery always has two ways of existing... Find one, and pass.
|
||||||
|
var $ = root.jQuery || root.$;
|
||||||
|
kutejQuery($, root.KUTE);
|
||||||
|
} else {
|
||||||
|
throw new Error("KUTE.js jQuery depends on KUTE.js and jQuery. Read the docs for more info.")
|
||||||
|
}
|
||||||
|
})(function($, KUTE) {
|
||||||
|
$.fn.KUTE = function( method, start, end, ops ) { // method can be Animate(), fromTo(), to(), stop(), start(), chain(), pause()
|
||||||
var tws = [], i, l = this.length;
|
var tws = [], i, l = this.length;
|
||||||
|
|
||||||
for (i=0;i<l;i++){
|
for (i=0;i<l;i++){
|
||||||
var mt = this[i][method];
|
var mt = this[i][method];
|
||||||
if ( typeof mt === 'function' ) {
|
if ( typeof mt === 'function' ) {
|
||||||
mt.apply(this[i]);
|
mt.apply(this[i]);
|
||||||
}
|
}
|
||||||
if ( method === 'to' ) {
|
if ( method === 'to' ) {
|
||||||
tws.push( new KUTE[method]( this[i], start, end ) ); // here start is end and end is ops
|
tws.push( new KUTE[method]( this[i], start, end ) ); // here start is end and end is ops
|
||||||
} else if ( method === 'fromTo' || method === 'Animate' ) {
|
} else if ( method === 'fromTo' || method === 'Animate' ) {
|
||||||
tws.push( new KUTE[method]( this[i], start, end, ops ) );
|
tws.push( new KUTE[method]( this[i], start, end, ops ) );
|
||||||
} else if ( method === 'chain' ) {
|
} else if ( method === 'chain' ) {
|
||||||
this[i].chain.apply(this[i],start);
|
this[i].chain.apply(this[i],start);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return tws;
|
return tws;
|
||||||
};
|
};
|
||||||
})(jQuery);
|
});
|
||||||
|
|
555
kute-physics.js
555
kute-physics.js
|
@ -2,301 +2,320 @@
|
||||||
* KUTE.js - The Light Tweening Engine | dnp_theme
|
* KUTE.js - The Light Tweening Engine | dnp_theme
|
||||||
* package dynamics.js easings pack by Michael Villar
|
* package dynamics.js easings pack by Michael Villar
|
||||||
* https://github.com/michaelvillar/dynamics.js
|
* https://github.com/michaelvillar/dynamics.js
|
||||||
* optimized by dnp_theme 2015 – MIT License
|
* optimized by dnp_theme 2015 – MIT License
|
||||||
* Licensed under MIT-License
|
* Licensed under MIT-License
|
||||||
*/
|
*/
|
||||||
|
|
||||||
KUTE.Physics = {};
|
|
||||||
var _kp = KUTE.Physics, _hPI = Math.PI / 2;
|
|
||||||
|
|
||||||
// spring easing
|
(function(kutePhysics){
|
||||||
_kp.spring = function(options) {
|
// Obtain a reference to the base KUTE.
|
||||||
options = options || {};
|
// Since KUTE supports a variety of module systems,
|
||||||
|
// we need to pick up which one to use.
|
||||||
var fq = Math.max(1, (options.frequency || 300 ) / 20),
|
if(define == "function") {
|
||||||
fc = Math.pow(20, (options.friction || 200 ) / 100),
|
define(["./kute.js"], function(KUTE){ kutePhysics(KUTE); return KUTE; });
|
||||||
aSt = options.anticipationStrength || 0,
|
} else if(typeof module == "object" && typeof require == "function") {
|
||||||
aS = (options.anticipationSize || 0) / 1000;
|
// We assume, that require() is sync.
|
||||||
|
var KUTE = require("./kute.js");
|
||||||
_kps.run = function(t) {
|
kutePhysics(KUTE);
|
||||||
var A, At, a, angle, b, frictionT, y0, yS;
|
// Export the modified one. Not really required, but convenient.
|
||||||
|
module.exports = KUTE;
|
||||||
frictionT = (t / (1 - aS)) - (aS / (1 - aS));
|
} else if(typeof root.KUTE != "undefined") {
|
||||||
if (t < aS) {
|
kutePhysics(root.KUTE);
|
||||||
yS = (aS / (1 - aS)) - (aS / (1 - aS));
|
|
||||||
y0 = (0 / (1 - aS)) - (aS / (1 - aS));
|
|
||||||
b = Math.acos(1 / _kps.A1(t,yS));
|
|
||||||
a = (Math.acos(1 / _kps.A1(t,y0)) - b) / (fq * (-aS));
|
|
||||||
A = _kps.A1;
|
|
||||||
} else {
|
} else {
|
||||||
A = _kps.A2;
|
throw new Error("KUTE.js Physics depends on KUTE.js. Read the docs for more info.")
|
||||||
b = 0;
|
|
||||||
a = 1;
|
|
||||||
}
|
}
|
||||||
At = A(frictionT,aS,aSt,fc);
|
})(function(KUTE){
|
||||||
angle = fq * (t - aS) * a + b;
|
KUTE.Physics = {};
|
||||||
return 1 - (At * Math.cos(angle));
|
var _kp = KUTE.Physics, _hPI = Math.PI / 2;
|
||||||
};
|
|
||||||
|
|
||||||
return _kps.run;
|
|
||||||
};
|
|
||||||
|
|
||||||
var _kps = _kp.spring.prototype;
|
// spring easing
|
||||||
_kps.run = {};
|
_kp.spring = function(options) {
|
||||||
_kps.A1 = function(t,aS,aSt) {
|
options = options || {};
|
||||||
var a, b, x0, x1;
|
|
||||||
x0 = aS / (1 - aS);
|
|
||||||
x1 = 0;
|
|
||||||
b = (x0 - (0.8 * x1)) / (x0 - x1);
|
|
||||||
a = (0.8 - b) / x0;
|
|
||||||
return (a * t * aSt / 100) + b;
|
|
||||||
};
|
|
||||||
_kps.A2 = function(t,aS,aSt,f) {
|
|
||||||
return Math.pow(f / 10, -t) * (1 - t);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
var fq = Math.max(1, (options.frequency || 300 ) / 20),
|
||||||
|
fc = Math.pow(20, (options.friction || 200 ) / 100),
|
||||||
|
aSt = options.anticipationStrength || 0,
|
||||||
|
aS = (options.anticipationSize || 0) / 1000;
|
||||||
|
|
||||||
// bounce
|
_kps.run = function(t) {
|
||||||
_kp.bounce = function(options) {
|
var A, At, a, angle, b, frictionT, y0, yS;
|
||||||
options = options || {};
|
|
||||||
var fq = Math.max(1, (options.frequency || 300) / 20),
|
|
||||||
f = Math.pow(20, (options.friction || 200) / 100);
|
|
||||||
|
|
||||||
_kpo.run = function(t) {
|
|
||||||
var At = Math.pow(f / 10, -t) * (1 - t),
|
|
||||||
angle = fq * t * 1 + _hPI;
|
|
||||||
return At * Math.cos(angle);
|
|
||||||
};
|
|
||||||
return _kpo.run;
|
|
||||||
};
|
|
||||||
|
|
||||||
var _kpo = _kp.bounce.prototype;
|
frictionT = (t / (1 - aS)) - (aS / (1 - aS));
|
||||||
_kpo.run = {};
|
if (t < aS) {
|
||||||
|
yS = (aS / (1 - aS)) - (aS / (1 - aS));
|
||||||
|
y0 = (0 / (1 - aS)) - (aS / (1 - aS));
|
||||||
// gravity
|
b = Math.acos(1 / _kps.A1(t,yS));
|
||||||
_kp.gravity = function(options) {
|
a = (Math.acos(1 / _kps.A1(t,y0)) - b) / (fq * (-aS));
|
||||||
var bounciness, curves, elasticity, gravity, initialForce;
|
A = _kps.A1;
|
||||||
|
} else {
|
||||||
options = options || {};
|
A = _kps.A2;
|
||||||
bounciness = ( options.bounciness || 400 ) / 1250;
|
b = 0;
|
||||||
elasticity = ( options.elasticity || 200 ) / 1000;
|
a = 1;
|
||||||
initialForce = options.initialForce || false;
|
}
|
||||||
|
At = A(frictionT,aS,aSt,fc);
|
||||||
gravity = 100;
|
angle = fq * (t - aS) * a + b;
|
||||||
curves = [];
|
return 1 - (At * Math.cos(angle));
|
||||||
_kpg.L = (function() {
|
|
||||||
var b, curve;
|
|
||||||
b = Math.sqrt(2 / gravity);
|
|
||||||
curve = {
|
|
||||||
a: -b,
|
|
||||||
b: b,
|
|
||||||
H: 1
|
|
||||||
};
|
|
||||||
if (initialForce) {
|
|
||||||
curve.a = 0;
|
|
||||||
curve.b = curve.b * 2;
|
|
||||||
}
|
|
||||||
while (curve.H > 0.001) {
|
|
||||||
_kpg.L = curve.b - curve.a;
|
|
||||||
curve = {
|
|
||||||
a: curve.b,
|
|
||||||
b: curve.b + _kpg.L * bounciness,
|
|
||||||
H: curve.H * bounciness * bounciness
|
|
||||||
};
|
};
|
||||||
}
|
|
||||||
return curve.b;
|
|
||||||
})();
|
|
||||||
|
|
||||||
(function() {
|
return _kps.run;
|
||||||
var L2, b, curve, _results;
|
|
||||||
b = Math.sqrt(2 / (gravity * _kpg.L * _kpg.L));
|
|
||||||
curve = {
|
|
||||||
a: -b,
|
|
||||||
b: b,
|
|
||||||
H: 1
|
|
||||||
};
|
};
|
||||||
if (initialForce) {
|
|
||||||
curve.a = 0;
|
var _kps = _kp.spring.prototype;
|
||||||
curve.b = curve.b * 2;
|
_kps.run = {};
|
||||||
}
|
_kps.A1 = function(t,aS,aSt) {
|
||||||
curves.push(curve);
|
var a, b, x0, x1;
|
||||||
L2 = _kpg.L;
|
x0 = aS / (1 - aS);
|
||||||
_results = [];
|
x1 = 0;
|
||||||
while (curve.b < 1 && curve.H > 0.001) {
|
b = (x0 - (0.8 * x1)) / (x0 - x1);
|
||||||
L2 = curve.b - curve.a;
|
a = (0.8 - b) / x0;
|
||||||
curve = {
|
return (a * t * aSt / 100) + b;
|
||||||
a: curve.b,
|
};
|
||||||
b: curve.b + L2 * bounciness,
|
_kps.A2 = function(t,aS,aSt,f) {
|
||||||
H: curve.H * elasticity
|
return Math.pow(f / 10, -t) * (1 - t);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// bounce
|
||||||
|
_kp.bounce = function(options) {
|
||||||
|
options = options || {};
|
||||||
|
var fq = Math.max(1, (options.frequency || 300) / 20),
|
||||||
|
f = Math.pow(20, (options.friction || 200) / 100);
|
||||||
|
|
||||||
|
_kpo.run = function(t) {
|
||||||
|
var At = Math.pow(f / 10, -t) * (1 - t),
|
||||||
|
angle = fq * t * 1 + _hPI;
|
||||||
|
return At * Math.cos(angle);
|
||||||
};
|
};
|
||||||
_results.push(curves.push(curve));
|
return _kpo.run;
|
||||||
}
|
};
|
||||||
return _results;
|
|
||||||
})();
|
var _kpo = _kp.bounce.prototype;
|
||||||
_kpg.fn = function(t) {
|
_kpo.run = {};
|
||||||
var curve, i, v;
|
|
||||||
i = 0;
|
|
||||||
curve = curves[i];
|
// gravity
|
||||||
while (!(t >= curve.a && t <= curve.b)) {
|
_kp.gravity = function(options) {
|
||||||
i += 1;
|
var bounciness, curves, elasticity, gravity, initialForce;
|
||||||
curve = curves[i];
|
|
||||||
if (!curve) {
|
options = options || {};
|
||||||
break;
|
bounciness = ( options.bounciness || 400 ) / 1250;
|
||||||
|
elasticity = ( options.elasticity || 200 ) / 1000;
|
||||||
|
initialForce = options.initialForce || false;
|
||||||
|
|
||||||
|
gravity = 100;
|
||||||
|
curves = [];
|
||||||
|
_kpg.L = (function() {
|
||||||
|
var b, curve;
|
||||||
|
b = Math.sqrt(2 / gravity);
|
||||||
|
curve = {
|
||||||
|
a: -b,
|
||||||
|
b: b,
|
||||||
|
H: 1
|
||||||
|
};
|
||||||
|
if (initialForce) {
|
||||||
|
curve.a = 0;
|
||||||
|
curve.b = curve.b * 2;
|
||||||
|
}
|
||||||
|
while (curve.H > 0.001) {
|
||||||
|
_kpg.L = curve.b - curve.a;
|
||||||
|
curve = {
|
||||||
|
a: curve.b,
|
||||||
|
b: curve.b + _kpg.L * bounciness,
|
||||||
|
H: curve.H * bounciness * bounciness
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return curve.b;
|
||||||
|
})();
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var L2, b, curve, _results;
|
||||||
|
b = Math.sqrt(2 / (gravity * _kpg.L * _kpg.L));
|
||||||
|
curve = {
|
||||||
|
a: -b,
|
||||||
|
b: b,
|
||||||
|
H: 1
|
||||||
|
};
|
||||||
|
if (initialForce) {
|
||||||
|
curve.a = 0;
|
||||||
|
curve.b = curve.b * 2;
|
||||||
|
}
|
||||||
|
curves.push(curve);
|
||||||
|
L2 = _kpg.L;
|
||||||
|
_results = [];
|
||||||
|
while (curve.b < 1 && curve.H > 0.001) {
|
||||||
|
L2 = curve.b - curve.a;
|
||||||
|
curve = {
|
||||||
|
a: curve.b,
|
||||||
|
b: curve.b + L2 * bounciness,
|
||||||
|
H: curve.H * elasticity
|
||||||
|
};
|
||||||
|
_results.push(curves.push(curve));
|
||||||
|
}
|
||||||
|
return _results;
|
||||||
|
})();
|
||||||
|
_kpg.fn = function(t) {
|
||||||
|
var curve, i, v;
|
||||||
|
i = 0;
|
||||||
|
curve = curves[i];
|
||||||
|
while (!(t >= curve.a && t <= curve.b)) {
|
||||||
|
i += 1;
|
||||||
|
curve = curves[i];
|
||||||
|
if (!curve) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!curve) {
|
||||||
|
v = initialForce ? 0 : 1;
|
||||||
|
} else {
|
||||||
|
v = _kpg.getPointInCurve(curve.a, curve.b, curve.H, t, options, _kpg.L);
|
||||||
|
}
|
||||||
|
return v;
|
||||||
|
};
|
||||||
|
|
||||||
|
return _kpg.fn;
|
||||||
|
};
|
||||||
|
|
||||||
|
var _kpg = _kp.gravity.prototype;
|
||||||
|
_kpg.L = {};
|
||||||
|
_kpg.fn = {};
|
||||||
|
_kpg.getPointInCurve = function(a, b, H, t, o, L) {
|
||||||
|
var c, t2;
|
||||||
|
L = b - a;
|
||||||
|
t2 = (2 / L) * t - 1 - (a * 2 / L);
|
||||||
|
c = t2 * t2 * H - H + 1;
|
||||||
|
if (o.initialForce) {
|
||||||
|
c = 1 - c;
|
||||||
}
|
}
|
||||||
}
|
return c;
|
||||||
if (!curve) {
|
};
|
||||||
v = initialForce ? 0 : 1;
|
|
||||||
} else {
|
|
||||||
v = _kpg.getPointInCurve(curve.a, curve.b, curve.H, t, options, _kpg.L);
|
|
||||||
}
|
|
||||||
return v;
|
|
||||||
};
|
|
||||||
|
|
||||||
return _kpg.fn;
|
//throw up and pull down by gravity
|
||||||
};
|
_kp.forceWithGravity = function(o) {
|
||||||
|
var ops = o || {};
|
||||||
var _kpg = _kp.gravity.prototype;
|
ops.initialForce = true;
|
||||||
_kpg.L = {};
|
return _kp.gravity(ops);
|
||||||
_kpg.fn = {};
|
};
|
||||||
_kpg.getPointInCurve = function(a, b, H, t, o, L) {
|
|
||||||
var c, t2;
|
|
||||||
L = b - a;
|
|
||||||
t2 = (2 / L) * t - 1 - (a * 2 / L);
|
|
||||||
c = t2 * t2 * H - H + 1;
|
|
||||||
if (o.initialForce) {
|
|
||||||
c = 1 - c;
|
|
||||||
}
|
|
||||||
return c;
|
|
||||||
};
|
|
||||||
|
|
||||||
//throw up and pull down by gravity
|
|
||||||
_kp.forceWithGravity = function(o) {
|
|
||||||
var ops = o || {};
|
|
||||||
ops.initialForce = true;
|
|
||||||
return _kp.gravity(ops);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// multi point bezier
|
// multi point bezier
|
||||||
_kp.bezier = function(options) {
|
_kp.bezier = function(options) {
|
||||||
options = options || {};
|
options = options || {};
|
||||||
var points = options.points,
|
var points = options.points,
|
||||||
returnsToSelf = false, Bs = [];
|
returnsToSelf = false, Bs = [];
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
var i, k;
|
var i, k;
|
||||||
|
|
||||||
for (i in points) {
|
for (i in points) {
|
||||||
k = parseInt(i);
|
k = parseInt(i);
|
||||||
if (k >= points.length - 1) {
|
if (k >= points.length - 1) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
_kpb.fn(points[k], points[k + 1], Bs);
|
||||||
|
}
|
||||||
|
return Bs;
|
||||||
|
})();
|
||||||
|
|
||||||
|
_kpb.run = function(t) {
|
||||||
|
if (t === 0) {
|
||||||
|
return 0;
|
||||||
|
} else if (t === 1) {
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
return _kpb.yForX(t, Bs, returnsToSelf);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return _kpb.run;
|
||||||
|
};
|
||||||
|
|
||||||
|
var _kpb = _kp.bezier.prototype;
|
||||||
|
_kpb.B2 = {};
|
||||||
|
_kpb.run = {};
|
||||||
|
|
||||||
|
_kpb.fn = function(pointA, pointB, Bs) {
|
||||||
|
var B2 = function(t) {
|
||||||
|
return _kpb.Bezier(t, pointA, pointA.cp[pointA.cp.length - 1], pointB.cp[0], pointB);
|
||||||
|
};
|
||||||
|
return Bs.push(B2);
|
||||||
|
};
|
||||||
|
|
||||||
|
_kpb.Bezier = function(t, p0, p1, p2, p3) {
|
||||||
|
return {
|
||||||
|
x: (Math.pow(1 - t, 3) * p0.x) + (3 * Math.pow(1 - t, 2) * t * p1.x) + (3 * (1 - t) * Math.pow(t, 2) * p2.x) + Math.pow(t, 3) * p3.x,
|
||||||
|
y: (Math.pow(1 - t, 3) * p0.y) + (3 * Math.pow(1 - t, 2) * t * p1.y) + (3 * (1 - t) * Math.pow(t, 2) * p2.y) + Math.pow(t, 3) * p3.y
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
_kpb.yForX = function(xTarget, Bs, rTS) {
|
||||||
|
var B, aB, i, lower, percent, upper, x, xT, _i = 0, _len = Bs.length;
|
||||||
|
B = null;
|
||||||
|
for (_i; _i < _len; _i++) {
|
||||||
|
aB = Bs[_i];
|
||||||
|
if (xTarget >= aB(0).x && xTarget <= aB(1).x) {
|
||||||
|
B = aB;
|
||||||
|
}
|
||||||
|
if (B !== null) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
_kpb.fn(points[k], points[k + 1], Bs);
|
|
||||||
}
|
}
|
||||||
return Bs;
|
if (!B) {
|
||||||
})();
|
return ( rTS ? 0 : 1 );
|
||||||
|
|
||||||
_kpb.run = function(t) {
|
|
||||||
if (t === 0) {
|
|
||||||
return 0;
|
|
||||||
} else if (t === 1) {
|
|
||||||
return 1;
|
|
||||||
} else {
|
|
||||||
return _kpb.yForX(t, Bs, returnsToSelf);
|
|
||||||
}
|
}
|
||||||
|
xT = 0.0001; // xTolerance
|
||||||
|
lower = 0; upper = 1;
|
||||||
|
percent = (upper + lower) / 2;
|
||||||
|
x = B(percent).x; i = 0;
|
||||||
|
while (Math.abs(xTarget - x) > xT && i < 100) {
|
||||||
|
if (xTarget > x) {
|
||||||
|
lower = percent;
|
||||||
|
} else {
|
||||||
|
upper = percent;
|
||||||
|
}
|
||||||
|
percent = (upper + lower) / 2;
|
||||||
|
x = B(percent).x;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
return B(percent).y;
|
||||||
};
|
};
|
||||||
return _kpb.run;
|
|
||||||
};
|
|
||||||
|
|
||||||
var _kpb = _kp.bezier.prototype;
|
_kp.physicsInOut = function(options) {
|
||||||
_kpb.B2 = {};
|
var friction;
|
||||||
_kpb.run = {};
|
options = options || {};
|
||||||
|
friction = options.friction|| 500;
|
||||||
|
return _kp.bezier({ points: [ { x: 0, y: 0, cp: [ { x: 0.92 - (friction / 1000), y: 0 } ] }, { x: 1, y: 1, cp: [ { x: 0.08 + (friction / 1000), y: 1 } ] } ] });
|
||||||
|
};
|
||||||
|
|
||||||
_kpb.fn = function(pointA, pointB, Bs) {
|
_kp.physicsIn = function(options) {
|
||||||
var B2 = function(t) {
|
var friction;
|
||||||
return _kpb.Bezier(t, pointA, pointA.cp[pointA.cp.length - 1], pointB.cp[0], pointB);
|
options = options || {};
|
||||||
};
|
friction = options.friction|| 500;
|
||||||
return Bs.push(B2);
|
return _kp.bezier({ points: [ { x: 0, y: 0, cp: [ { x: 0.92 - (friction / 1000), y: 0 } ] }, { x: 1, y: 1, cp: [ { x: 1, y: 1 } ] } ] });
|
||||||
};
|
};
|
||||||
|
|
||||||
_kpb.Bezier = function(t, p0, p1, p2, p3) {
|
_kp.physicsOut = function(options) {
|
||||||
return {
|
var friction;
|
||||||
x: (Math.pow(1 - t, 3) * p0.x) + (3 * Math.pow(1 - t, 2) * t * p1.x) + (3 * (1 - t) * Math.pow(t, 2) * p2.x) + Math.pow(t, 3) * p3.x,
|
options = options || {};
|
||||||
y: (Math.pow(1 - t, 3) * p0.y) + (3 * Math.pow(1 - t, 2) * t * p1.y) + (3 * (1 - t) * Math.pow(t, 2) * p2.y) + Math.pow(t, 3) * p3.y
|
friction = options.friction|| 500;
|
||||||
};
|
return _kp.bezier({ points: [ { x: 0, y: 0, cp: [ { x: 0, y: 0 } ] }, { x: 1, y: 1, cp: [ { x: 0.08 + (friction / 1000), y: 1 } ] }] });
|
||||||
};
|
};
|
||||||
|
|
||||||
_kpb.yForX = function(xTarget, Bs, rTS) {
|
_kp.physicsBackOut = function(options) {
|
||||||
var B, aB, i, lower, percent, upper, x, xT, _i = 0, _len = Bs.length;
|
var friction;
|
||||||
B = null;
|
options = options || {};
|
||||||
for (_i; _i < _len; _i++) {
|
friction = options.friction|| 500;
|
||||||
aB = Bs[_i];
|
return _kp.bezier({ points: [{"x":0,"y":0,"cp":[{"x":0,"y":0}]},{"x":1,"y":1,"cp":[{"x":0.735+(friction/1000),"y":1.3}]}] });
|
||||||
if (xTarget >= aB(0).x && xTarget <= aB(1).x) {
|
};
|
||||||
B = aB;
|
|
||||||
}
|
|
||||||
if (B !== null) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!B) {
|
|
||||||
return ( rTS ? 0 : 1 );
|
|
||||||
}
|
|
||||||
xT = 0.0001; // xTolerance
|
|
||||||
lower = 0; upper = 1;
|
|
||||||
percent = (upper + lower) / 2;
|
|
||||||
x = B(percent).x; i = 0;
|
|
||||||
while (Math.abs(xTarget - x) > xT && i < 100) {
|
|
||||||
if (xTarget > x) {
|
|
||||||
lower = percent;
|
|
||||||
} else {
|
|
||||||
upper = percent;
|
|
||||||
}
|
|
||||||
percent = (upper + lower) / 2;
|
|
||||||
x = B(percent).x;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
return B(percent).y;
|
|
||||||
};
|
|
||||||
|
|
||||||
_kp.physicsInOut = function(options) {
|
|
||||||
var friction;
|
|
||||||
options = options || {};
|
|
||||||
friction = options.friction|| 500;
|
|
||||||
return _kp.bezier({ points: [ { x: 0, y: 0, cp: [ { x: 0.92 - (friction / 1000), y: 0 } ] }, { x: 1, y: 1, cp: [ { x: 0.08 + (friction / 1000), y: 1 } ] } ] });
|
|
||||||
};
|
|
||||||
|
|
||||||
_kp.physicsIn = function(options) {
|
_kp.physicsBackIn = function(options) {
|
||||||
var friction;
|
var friction;
|
||||||
options = options || {};
|
options = options || {};
|
||||||
friction = options.friction|| 500;
|
friction = options.friction|| 500;
|
||||||
return _kp.bezier({ points: [ { x: 0, y: 0, cp: [ { x: 0.92 - (friction / 1000), y: 0 } ] }, { x: 1, y: 1, cp: [ { x: 1, y: 1 } ] } ] });
|
return _kp.bezier({ points: [{"x":0,"y":0,"cp":[{"x":0.28-(friction / 1000),"y":-0.6}]},{"x":1,"y":1,"cp":[{"x":1,"y":1}]}] });
|
||||||
};
|
};
|
||||||
|
|
||||||
_kp.physicsOut = function(options) {
|
_kp.physicsBackInOut = function(options) {
|
||||||
var friction;
|
var friction;
|
||||||
options = options || {};
|
options = options || {};
|
||||||
friction = options.friction|| 500;
|
friction = options.friction|| 500;
|
||||||
return _kp.bezier({ points: [ { x: 0, y: 0, cp: [ { x: 0, y: 0 } ] }, { x: 1, y: 1, cp: [ { x: 0.08 + (friction / 1000), y: 1 } ] }] });
|
return _kp.bezier({ points: [{"x":0,"y":0,"cp":[{"x":0.68-(friction / 1000),"y":-0.55}]},{"x":1,"y":1,"cp":[{"x":0.265+(friction / 1000),"y":1.45}]}] });
|
||||||
};
|
};
|
||||||
|
});
|
||||||
_kp.physicsBackOut = function(options) {
|
|
||||||
var friction;
|
|
||||||
options = options || {};
|
|
||||||
friction = options.friction|| 500;
|
|
||||||
return _kp.bezier({ points: [{"x":0,"y":0,"cp":[{"x":0,"y":0}]},{"x":1,"y":1,"cp":[{"x":0.735+(friction/1000),"y":1.3}]}] });
|
|
||||||
};
|
|
||||||
|
|
||||||
_kp.physicsBackIn = function(options) {
|
|
||||||
var friction;
|
|
||||||
options = options || {};
|
|
||||||
friction = options.friction|| 500;
|
|
||||||
return _kp.bezier({ points: [{"x":0,"y":0,"cp":[{"x":0.28-(friction / 1000),"y":-0.6}]},{"x":1,"y":1,"cp":[{"x":1,"y":1}]}] });
|
|
||||||
};
|
|
||||||
|
|
||||||
_kp.physicsBackInOut = function(options) {
|
|
||||||
var friction;
|
|
||||||
options = options || {};
|
|
||||||
friction = options.friction|| 500;
|
|
||||||
return _kp.bezier({ points: [{"x":0,"y":0,"cp":[{"x":0.68-(friction / 1000),"y":-0.55}]},{"x":1,"y":1,"cp":[{"x":0.265+(friction / 1000),"y":1.45}]}] });
|
|
||||||
};
|
|
||||||
|
|
320
kute.js
320
kute.js
|
@ -4,23 +4,23 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
(function (root, factory) {
|
(function (root, factory) {
|
||||||
if (typeof define === 'function' && define.amd) {
|
if (typeof define === 'function' && define.amd) {
|
||||||
define(['KUTE'], factory); // AMD. Register as an anonymous module.
|
define([], factory); // AMD. Register as an anonymous module.
|
||||||
} else if (typeof exports == 'object') {
|
} else if (typeof exports == 'object') {
|
||||||
module.exports = factory(); // Node, not strict CommonJS
|
module.exports = factory(); // Node, not strict CommonJS
|
||||||
} else {
|
} else {
|
||||||
// Browser globals
|
// Browser globals
|
||||||
root.KUTE = root.KUTE || factory();
|
root.KUTE = root.KUTE || factory();
|
||||||
}
|
}
|
||||||
}(this, function () {
|
}(this, function () {
|
||||||
var K = K || {}, _tws = [], _t, _stk = false, // _stoppedTick // _tweens // KUTE, _tween, _tick,
|
var K = K || {}, _tws = [], _t, _stk = false, // _stoppedTick // _tweens // KUTE, _tween, _tick,
|
||||||
_pf = getPrefix(), // prefix
|
_pf = getPrefix(), // prefix
|
||||||
_rafR = _rafR || ((!('requestAnimationFrame' in window)) ? true : false), // is prefix required for requestAnimationFrame
|
_rafR = _rafR || ((!('requestAnimationFrame' in window)) ? true : false), // is prefix required for requestAnimationFrame
|
||||||
_pfT = _pfT || ((!('transform' in document.getElementsByTagName('div')[0].style)) ? true : false), // is prefix required for transform
|
_pfT = _pfT || ((!('transform' in document.getElementsByTagName('div')[0].style)) ? true : false), // is prefix required for transform
|
||||||
_pfB = _pfB || ((!('border-radius' in document.getElementsByTagName('div')[0].style)) ? true : false), // is prefix required for border-radius
|
_pfB = _pfB || ((!('border-radius' in document.getElementsByTagName('div')[0].style)) ? true : false), // is prefix required for border-radius
|
||||||
_tch = _tch || (('ontouchstart' in window || navigator.msMaxTouchPoints) || false), // support Touch?
|
_tch = _tch || (('ontouchstart' in window || navigator.msMaxTouchPoints) || false), // support Touch?
|
||||||
_ev = _ev || (_tch ? 'touchstart' : 'mousewheel'), //event to prevent on scroll
|
_ev = _ev || (_tch ? 'touchstart' : 'mousewheel'), //event to prevent on scroll
|
||||||
|
|
||||||
_bd = document.body,
|
_bd = document.body,
|
||||||
_htm = document.getElementsByTagName('HTML')[0],
|
_htm = document.getElementsByTagName('HTML')[0],
|
||||||
_sct = (/webkit/i.test(navigator.userAgent) || document.compatMode == 'BackCompat' ? _bd : _htm),
|
_sct = (/webkit/i.test(navigator.userAgent) || document.compatMode == 'BackCompat' ? _bd : _htm),
|
||||||
|
@ -39,16 +39,16 @@
|
||||||
_brbr = _brbr || _pfB ? _pf + 'BorderBottomRightRadius' : 'borderBottomRightRadius',
|
_brbr = _brbr || _pfB ? _pf + 'BorderBottomRightRadius' : 'borderBottomRightRadius',
|
||||||
_raf = _raf || _rafR ? window[_pf + 'RequestAnimationFrame'] : window['requestAnimationFrame'],
|
_raf = _raf || _rafR ? window[_pf + 'RequestAnimationFrame'] : window['requestAnimationFrame'],
|
||||||
_caf = _caf || _rafR ? window[_pf + 'CancelAnimationFrame'] : window['cancelAnimationFrame'],
|
_caf = _caf || _rafR ? window[_pf + 'CancelAnimationFrame'] : window['cancelAnimationFrame'],
|
||||||
|
|
||||||
//supported properties
|
//supported properties
|
||||||
_cls = ['color', 'backgroundColor', 'borderColor', 'borderTopColor', 'borderRightColor', 'borderBottomColor', 'borderLeftColor'], // colors 'hex', 'rgb', 'rgba' -- #fff / rgb(0,0,0) / rgba(0,0,0,0)
|
_cls = ['color', 'backgroundColor', 'borderColor', 'borderTopColor', 'borderRightColor', 'borderBottomColor', 'borderLeftColor'], // colors 'hex', 'rgb', 'rgba' -- #fff / rgb(0,0,0) / rgba(0,0,0,0)
|
||||||
_sc = ['scrollTop', 'scroll'], //scroll, it has no default value, it's calculated on tween start
|
_sc = ['scrollTop', 'scroll'], //scroll, it has no default value, it's calculated on tween start
|
||||||
_clp = ['clip'], // clip
|
_clp = ['clip'], // clip
|
||||||
_op = ['opacity'], // opacity
|
_op = ['opacity'], // opacity
|
||||||
_rd = ['borderRadius', 'borderTopLeftRadius', 'borderTopRightRadius', 'borderBottomLeftRadius', 'borderBottomRightRadius'], // border radius px/any
|
_rd = ['borderRadius', 'borderTopLeftRadius', 'borderTopRightRadius', 'borderBottomLeftRadius', 'borderBottomRightRadius'], // border radius px/any
|
||||||
_bm = ['top', 'left', 'right', 'bottom',
|
_bm = ['top', 'left', 'right', 'bottom',
|
||||||
'width', 'height', 'minWidth', 'minHeight', 'maxWidth', 'maxHeight',
|
'width', 'height', 'minWidth', 'minHeight', 'maxWidth', 'maxHeight',
|
||||||
'padding', 'margin', 'paddingTop','paddingBottom', 'paddingLeft', 'paddingRight', 'marginTop','marginBottom', 'marginLeft', 'marginRight',
|
'padding', 'margin', 'paddingTop','paddingBottom', 'paddingLeft', 'paddingRight', 'marginTop','marginBottom', 'marginLeft', 'marginRight',
|
||||||
'borderWidth', 'borderTopWidth', 'borderRightWidth', 'borderBottomWidth', 'borderLeftWidth'], // dimensions / box model
|
'borderWidth', 'borderTopWidth', 'borderRightWidth', 'borderBottomWidth', 'borderLeftWidth'], // dimensions / box model
|
||||||
_tp = ['fontSize','lineHeight','letterSpacing'], // text properties
|
_tp = ['fontSize','lineHeight','letterSpacing'], // text properties
|
||||||
_bg = ['backgroundPosition'], // background position
|
_bg = ['backgroundPosition'], // background position
|
||||||
|
@ -64,22 +64,22 @@
|
||||||
if (_cls.indexOf(p) !== -1){
|
if (_cls.indexOf(p) !== -1){
|
||||||
_d[p] = 'rgba(0,0,0,0)'; // _d[p] = {r:0,g:0,b:0,a:1};
|
_d[p] = 'rgba(0,0,0,0)'; // _d[p] = {r:0,g:0,b:0,a:1};
|
||||||
} else if ( _rd.indexOf(p) !== -1 || _bm.indexOf(p) !== -1 || _tp.indexOf(p) !== -1) {
|
} else if ( _rd.indexOf(p) !== -1 || _bm.indexOf(p) !== -1 || _tp.indexOf(p) !== -1) {
|
||||||
_d[p] = 0;
|
_d[p] = 0;
|
||||||
} else if ( _bg.indexOf(p) !== -1 ){
|
} else if ( _bg.indexOf(p) !== -1 ){
|
||||||
_d[p] = [50,50];
|
_d[p] = [50,50];
|
||||||
} else if ( p === 'clip' ){
|
} else if ( p === 'clip' ){
|
||||||
_d[p] = [0,0,0,0];
|
_d[p] = [0,0,0,0];
|
||||||
} else if ( p === 'translate3d' ){
|
} else if ( p === 'translate3d' ){
|
||||||
_d[p] = [0,0,0];
|
_d[p] = [0,0,0];
|
||||||
} else if ( p === 'translate' ){
|
} else if ( p === 'translate' ){
|
||||||
_d[p] = [0,0];
|
_d[p] = [0,0];
|
||||||
} else if ( p === 'rotate' || /X|Y|Z/.test(p) ){
|
} else if ( p === 'rotate' || /X|Y|Z/.test(p) ){
|
||||||
_d[p] = 0;
|
_d[p] = 0;
|
||||||
} else if ( p === 'scale' || p === 'opacity' ){
|
} else if ( p === 'scale' || p === 'opacity' ){
|
||||||
_d[p] = 1;
|
_d[p] = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//more internals
|
//more internals
|
||||||
K.getAll = function () { return _tws; };
|
K.getAll = function () { return _tws; };
|
||||||
K.removeAll = function () { _tws = []; };
|
K.removeAll = function () { _tws = []; };
|
||||||
|
@ -106,16 +106,16 @@
|
||||||
_stk = false;
|
_stk = false;
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
// internal stopTick
|
// internal stopTick
|
||||||
K.s = function () {
|
K.s = function () {
|
||||||
if ( _stk === false ) {
|
if ( _stk === false ) {
|
||||||
_caf(_t);
|
_caf(_t);
|
||||||
_stk = true;
|
_stk = true;
|
||||||
_t = null;
|
_t = null;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
//main methods
|
//main methods
|
||||||
K.to = function (el, to, o) {
|
K.to = function (el, to, o) {
|
||||||
if ( o === undefined ) { o = {}; }
|
if ( o === undefined ) { o = {}; }
|
||||||
|
@ -136,8 +136,8 @@
|
||||||
var _o = o;
|
var _o = o;
|
||||||
|
|
||||||
_o.easing = _o && K.pe(_o.easing) || K.Easing.linear;
|
_o.easing = _o && K.pe(_o.easing) || K.Easing.linear;
|
||||||
|
|
||||||
var _vS = K.prP(f, false),
|
var _vS = K.prP(f, false),
|
||||||
_vE = K.prP(to, true),
|
_vE = K.prP(to, true),
|
||||||
_tw = new K.Tween(_el, _vS, _vE, _o);
|
_tw = new K.Tween(_el, _vS, _vE, _o);
|
||||||
return _tw;
|
return _tw;
|
||||||
|
@ -160,7 +160,7 @@
|
||||||
tv = v1 + (v2 - v1) * v,
|
tv = v1 + (v2 - v1) * v,
|
||||||
u = _end.unit,
|
u = _end.unit,
|
||||||
// checking array on every frame takes time so let's cache these
|
// checking array on every frame takes time so let's cache these
|
||||||
cls = _cls.indexOf(p) !== -1,
|
cls = _cls.indexOf(p) !== -1,
|
||||||
bm = _tp.indexOf(p) !== -1 || _bm.indexOf(p) !== -1,
|
bm = _tp.indexOf(p) !== -1 || _bm.indexOf(p) !== -1,
|
||||||
rd = _rd.indexOf(p) !== -1 && !_isIE8,
|
rd = _rd.indexOf(p) !== -1 && !_isIE8,
|
||||||
sc = _sc.indexOf(p) !== -1,
|
sc = _sc.indexOf(p) !== -1,
|
||||||
|
@ -168,7 +168,7 @@
|
||||||
clp = _clp.indexOf(p) !== -1,
|
clp = _clp.indexOf(p) !== -1,
|
||||||
op = _op.indexOf(p) !== -1,
|
op = _op.indexOf(p) !== -1,
|
||||||
tf = p === 'transform' && !_isIE8;
|
tf = p === 'transform' && !_isIE8;
|
||||||
|
|
||||||
//process styles by property / property type
|
//process styles by property / property type
|
||||||
if ( rd ) {
|
if ( rd ) {
|
||||||
if (p === 'borderRadius') {
|
if (p === 'borderRadius') {
|
||||||
|
@ -181,53 +181,53 @@
|
||||||
css[_brbl] = tv + u;
|
css[_brbl] = tv + u;
|
||||||
} else if (p === 'borderBottomRightRadius') {
|
} else if (p === 'borderBottomRightRadius') {
|
||||||
css[_brbr] = tv + u;
|
css[_brbr] = tv + u;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (tf) {
|
} else if (tf) {
|
||||||
var _tS = '', tP, rps, pps = 'perspective('+w._pp+'px) '; //transform style & property
|
var _tS = '', tP, rps, pps = 'perspective('+w._pp+'px) '; //transform style & property
|
||||||
|
|
||||||
for (tP in _end) {
|
for (tP in _end) {
|
||||||
var t1 = _start[tP], t2 = _end[tP];
|
var t1 = _start[tP], t2 = _end[tP];
|
||||||
rps = _3d.indexOf(tP) !== -1 && !_isIE;
|
rps = _3d.indexOf(tP) !== -1 && !_isIE;
|
||||||
|
|
||||||
if ( tP === 'translate' ) {
|
if ( tP === 'translate' ) {
|
||||||
var tls = '', ts = {}, ax;
|
var tls = '', ts = {}, ax;
|
||||||
|
|
||||||
for (ax in t2){
|
for (ax in t2){
|
||||||
var x1 = t1[ax].value || 0, x2 = t2[ax].value || 0, xu = t2[ax].unit || 'px';
|
var x1 = t1[ax].value || 0, x2 = t2[ax].value || 0, xu = t2[ax].unit || 'px';
|
||||||
ts[ax] = x1===x2 ? x2+xu : (x1 + ( x2 - x1 ) * v) + xu;
|
ts[ax] = x1===x2 ? x2+xu : (x1 + ( x2 - x1 ) * v) + xu;
|
||||||
}
|
}
|
||||||
tls = t2.x ? 'translate(' + ts.x + ',' + ts.y + ')' :
|
tls = t2.x ? 'translate(' + ts.x + ',' + ts.y + ')' :
|
||||||
'translate3d(' + ts.translateX + ',' + ts.translateY + ',' + ts.translateZ + ')';
|
'translate3d(' + ts.translateX + ',' + ts.translateY + ',' + ts.translateZ + ')';
|
||||||
|
|
||||||
_tS = (_tS === '') ? tls : (tls + ' ' + _tS);
|
_tS = (_tS === '') ? tls : (tls + ' ' + _tS);
|
||||||
} else if ( tP === 'rotate' ) {
|
} else if ( tP === 'rotate' ) {
|
||||||
var rt = '', rS = {}, rx;
|
var rt = '', rS = {}, rx;
|
||||||
|
|
||||||
for ( rx in t2 ){
|
for ( rx in t2 ){
|
||||||
if ( t1[rx] ) {
|
if ( t1[rx] ) {
|
||||||
var a1 = t1[rx].value, a2 = t2[rx].value, au = t2[rx].unit||'deg',
|
var a1 = t1[rx].value, a2 = t2[rx].value, au = t2[rx].unit||'deg',
|
||||||
av = a1 + (a2 - a1) * v;
|
av = a1 + (a2 - a1) * v;
|
||||||
rS[rx] = rx ==='z' ? 'rotate('+av+au+')' : rx + '(' + av + au + ') ';
|
rS[rx] = rx ==='z' ? 'rotate('+av+au+')' : rx + '(' + av + au + ') ';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rt = t2.z ? rS.z : (rS.rotateX||'') + (rS.rotateY||'') + (rS.rotateZ||'');
|
rt = t2.z ? rS.z : (rS.rotateX||'') + (rS.rotateY||'') + (rS.rotateZ||'');
|
||||||
|
|
||||||
_tS = (_tS === '') ? rt : (_tS + ' ' + rt);
|
_tS = (_tS === '') ? rt : (_tS + ' ' + rt);
|
||||||
} else if (tP==='skew') {
|
} else if (tP==='skew') {
|
||||||
var sk = '', sS = {};
|
var sk = '', sS = {};
|
||||||
for ( var sx in t2 ){
|
for ( var sx in t2 ){
|
||||||
if ( t1[sx] ) {
|
if ( t1[sx] ) {
|
||||||
var s1 = t1[sx].value, s2 = t2[sx].value, su = t2[sx].unit||'deg',
|
var s1 = t1[sx].value, s2 = t2[sx].value, su = t2[sx].unit||'deg',
|
||||||
sv = s1 + (s2 - s1) * v;
|
sv = s1 + (s2 - s1) * v;
|
||||||
sS[sx] = sx + '(' + sv + su + ') ';
|
sS[sx] = sx + '(' + sv + su + ') ';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sk = (sS.skewX||'') + (sS.skewY||'');
|
sk = (sS.skewX||'') + (sS.skewY||'');
|
||||||
_tS = (_tS === '') ? sk : (_tS + ' ' + sk);
|
_tS = (_tS === '') ? sk : (_tS + ' ' + sk);
|
||||||
} else if (tP === 'scale') {
|
} else if (tP === 'scale') {
|
||||||
var sc1 = t1.value, sc2 = t2.value,
|
var sc1 = t1.value, sc2 = t2.value,
|
||||||
s = sc1 + (sc2 - sc1) * v, scS = tP + '(' + s + ')';
|
s = sc1 + (sc2 - sc1) * v, scS = tP + '(' + s + ')';
|
||||||
_tS = (_tS === '') ? scS : (_tS + ' ' + scS);
|
_tS = (_tS === '') ? scS : (_tS + ' ' + scS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -237,45 +237,45 @@
|
||||||
|
|
||||||
for (c in v2) {
|
for (c in v2) {
|
||||||
if ( c !== 'a' ){
|
if ( c !== 'a' ){
|
||||||
_c[c] = parseInt(v1[c] + (v2[c] - v1[c]) * v)||0;
|
_c[c] = parseInt(v1[c] + (v2[c] - v1[c]) * v)||0;
|
||||||
} else {
|
} else {
|
||||||
_c[c] = (v1[c] && v2[c]) ? parseFloat(v1[c] + (v2[c] - v1[c]) * v) : null;
|
_c[c] = (v1[c] && v2[c]) ? parseFloat(v1[c] + (v2[c] - v1[c]) * v) : null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( w._hex ) {
|
if ( w._hex ) {
|
||||||
css[p] = K.rth( parseInt(_c.r), parseInt(_c.g), parseInt(_c.b) );
|
css[p] = K.rth( parseInt(_c.r), parseInt(_c.g), parseInt(_c.b) );
|
||||||
} else {
|
} else {
|
||||||
css[p] = !_c.a || _isIE8 ? 'rgb(' + _c.r + ',' + _c.g + ',' + _c.b + ')' : 'rgba(' + _c.r + ',' + _c.g + ',' + _c.b + ',' + _c.a + ')';
|
css[p] = !_c.a || _isIE8 ? 'rgb(' + _c.r + ',' + _c.g + ',' + _c.b + ')' : 'rgba(' + _c.r + ',' + _c.g + ',' + _c.b + ',' + _c.a + ')';
|
||||||
}
|
}
|
||||||
} else if ( bm ) {
|
} else if ( bm ) {
|
||||||
css[p] = tv+u;
|
css[p] = tv+u;
|
||||||
} else if ( sc ) {
|
} else if ( sc ) {
|
||||||
ets.scrollTop = v1 + ( v2 - v1 ) * v;
|
ets.scrollTop = v1 + ( v2 - v1 ) * v;
|
||||||
} else if ( bg ) {
|
} else if ( bg ) {
|
||||||
var px1 = _start.x.v, px2 = _end.x.v, py1 = _start.y.v, py2 = _end.y.v,
|
var px1 = _start.x.v, px2 = _end.x.v, py1 = _start.y.v, py2 = _end.y.v,
|
||||||
px = (px1 + ( px2 - px1 ) * v), pxu = '%',
|
px = (px1 + ( px2 - px1 ) * v), pxu = '%',
|
||||||
py = (py1 + ( py2 - py1 ) * v), pyu = '%';
|
py = (py1 + ( py2 - py1 ) * v), pyu = '%';
|
||||||
css[p] = px + pxu + ' ' + py + pyu;
|
css[p] = px + pxu + ' ' + py + pyu;
|
||||||
} else if ( clp ) {
|
} else if ( clp ) {
|
||||||
var h = 0, cl = [];
|
var h = 0, cl = [];
|
||||||
for (h;h<4;h++){
|
for (h;h<4;h++){
|
||||||
var c1 = _start[h].v, c2 = _end[h].v, cu = _end[h].u || 'px';
|
var c1 = _start[h].v, c2 = _end[h].v, cu = _end[h].u || 'px';
|
||||||
cl[h] = ((c1 + ( c2 - c1 ) * v)) + cu;
|
cl[h] = ((c1 + ( c2 - c1 ) * v)) + cu;
|
||||||
}
|
}
|
||||||
css[p] = 'rect('+cl+')';
|
css[p] = 'rect('+cl+')';
|
||||||
} else if ( op ) {
|
} else if ( op ) {
|
||||||
css[opp] = !_isIE8 ? tv : "alpha(opacity=" + parseInt(tv*100) + ")";
|
css[opp] = !_isIE8 ? tv : "alpha(opacity=" + parseInt(tv*100) + ")";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
K.perspective = function (l,w) {
|
K.perspective = function (l,w) {
|
||||||
if ( w._ppo !== undefined ) { l.style[_pfo] = w._ppo; } // element perspective origin
|
if ( w._ppo !== undefined ) { l.style[_pfo] = w._ppo; } // element perspective origin
|
||||||
if ( w._ppp !== undefined ) { l.parentNode.style[_pfp] = w._ppp + 'px'; } // parent perspective
|
if ( w._ppp !== undefined ) { l.parentNode.style[_pfp] = w._ppp + 'px'; } // parent perspective
|
||||||
if ( w._pppo !== undefined ) { l.parentNode.style[_pfo] = w._pppo; } // parent perspective origin
|
if ( w._pppo !== undefined ) { l.parentNode.style[_pfo] = w._pppo; } // parent perspective origin
|
||||||
};
|
};
|
||||||
|
|
||||||
K.Tween = function (_el, _vS, _vE, _o) {
|
K.Tween = function (_el, _vS, _vE, _o) {
|
||||||
this._el = this._el || _el; // element animation is applied to
|
this._el = this._el || _el; // element animation is applied to
|
||||||
this._dr = this._dr || _o&&_o.duration || 700; //duration
|
this._dr = this._dr || _o&&_o.duration || 700; //duration
|
||||||
|
@ -290,11 +290,11 @@
|
||||||
this._dl = this._dl || _o&&_o.delay || 0; //delay
|
this._dl = this._dl || _o&&_o.delay || 0; //delay
|
||||||
this._sT = null; // startTime
|
this._sT = null; // startTime
|
||||||
this.paused = false; //_paused
|
this.paused = false; //_paused
|
||||||
this._pST = null; //_pauseStartTime
|
this._pST = null; //_pauseStartTime
|
||||||
this._pp = this._pp || _o.perspective; // perspective
|
this._pp = this._pp || _o.perspective; // perspective
|
||||||
this._ppo = this._ppo || _o.perspectiveOrigin; // perspective origin
|
this._ppo = this._ppo || _o.perspectiveOrigin; // perspective origin
|
||||||
this._ppp = this._ppp || _o.parentPerspective; // parent perspective
|
this._ppp = this._ppp || _o.parentPerspective; // parent perspective
|
||||||
this._pppo = this._pppo || _o.parentPerspectiveOrigin; // parent perspective origin
|
this._pppo = this._pppo || _o.parentPerspectiveOrigin; // parent perspective origin
|
||||||
this._rpr = this._rpr || _o.rpr || false; // internal option to process inline/computed style at start instead of init true/false
|
this._rpr = this._rpr || _o.rpr || false; // internal option to process inline/computed style at start instead of init true/false
|
||||||
this._hex = this._hex || _o.keepHex || false; // option to keep hex for color tweens true/false
|
this._hex = this._hex || _o.keepHex || false; // option to keep hex for color tweens true/false
|
||||||
this._e = this._e || _o.easing; // _easing
|
this._e = this._e || _o.easing; // _easing
|
||||||
|
@ -305,23 +305,23 @@
|
||||||
this._cC = _o&&_o.complete || null; // _on CompleteCallback
|
this._cC = _o&&_o.complete || null; // _on CompleteCallback
|
||||||
this._pC = _o&&_o.pause || null; // _on PauseCallback
|
this._pC = _o&&_o.pause || null; // _on PauseCallback
|
||||||
this._rC = _o&&_o.play || null; // _on ResumeCallback
|
this._rC = _o&&_o.play || null; // _on ResumeCallback
|
||||||
this._stC = _o&&_o.stop || null; // _on StopCallback
|
this._stC = _o&&_o.stop || null; // _on StopCallback
|
||||||
this.repeat = this._r; // we cache the number of repeats to be able to put it back after all cycles finish
|
this.repeat = this._r; // we cache the number of repeats to be able to put it back after all cycles finish
|
||||||
};
|
};
|
||||||
|
|
||||||
var w = K.Tween.prototype;
|
var w = K.Tween.prototype;
|
||||||
|
|
||||||
w.start = function (t) {
|
w.start = function (t) {
|
||||||
this.scrollIn();
|
this.scrollIn();
|
||||||
var f = {};
|
var f = {};
|
||||||
|
|
||||||
K.perspective(this._el,this); // apply the perspective
|
K.perspective(this._el,this); // apply the perspective
|
||||||
|
|
||||||
if ( this._rpr ) { // on start we reprocess the valuesStart for TO() method
|
if ( this._rpr ) { // on start we reprocess the valuesStart for TO() method
|
||||||
f = this.prS();
|
f = this.prS();
|
||||||
this._vS = {};
|
this._vS = {};
|
||||||
this._vS = K.prP(f,false);
|
this._vS = K.prP(f,false);
|
||||||
|
|
||||||
for ( p in this._vS ) {
|
for ( p in this._vS ) {
|
||||||
if ( p === 'transform' && (p in this._vE) ){
|
if ( p === 'transform' && (p in this._vE) ){
|
||||||
for ( var sp in this._vS[p]) {
|
for ( var sp in this._vS[p]) {
|
||||||
|
@ -336,10 +336,10 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( 'value' in this._vS[p][sp] && (!('value' in this._vE[p][sp])) ) { // 2nd level
|
if ( 'value' in this._vS[p][sp] && (!('value' in this._vE[p][sp])) ) { // 2nd level
|
||||||
for ( var spp in this._vS[p][sp] ) { // scale
|
for ( var spp in this._vS[p][sp] ) { // scale
|
||||||
if (!(spp in this._vE[p][sp])) {
|
if (!(spp in this._vE[p][sp])) {
|
||||||
this._vE[p][sp][spp] = this._vS[p][sp][spp]; // spp = unit | value
|
this._vE[p][sp][spp] = this._vS[p][sp][spp]; // spp = unit | value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -347,12 +347,12 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( p in this._vE ) {
|
for ( p in this._vE ) {
|
||||||
this._vSR[p] = this._vS[p];
|
this._vSR[p] = this._vS[p];
|
||||||
}
|
}
|
||||||
|
|
||||||
// now it's a good time to start
|
// now it's a good time to start
|
||||||
K.add(this);
|
K.add(this);
|
||||||
this.playing = true;
|
this.playing = true;
|
||||||
this.paused = false;
|
this.paused = false;
|
||||||
|
@ -362,7 +362,7 @@
|
||||||
if (!_t) K.t();
|
if (!_t) K.t();
|
||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
|
|
||||||
//main worker, doing update on tick
|
//main worker, doing update on tick
|
||||||
w.u = function(t) {
|
w.u = function(t) {
|
||||||
t = t || window.performance.now();
|
t = t || window.performance.now();
|
||||||
|
@ -375,49 +375,49 @@
|
||||||
|
|
||||||
var e = ( t - this._sT ) / this._dr; //elapsed
|
var e = ( t - this._sT ) / this._dr; //elapsed
|
||||||
e = e > 1 ? 1 : e;
|
e = e > 1 ? 1 : e;
|
||||||
|
|
||||||
//render the CSS update
|
//render the CSS update
|
||||||
K.r(this,this._e(e));
|
K.r(this,this._e(e));
|
||||||
|
|
||||||
if (this._uC) { this._uC.call(); }
|
if (this._uC) { this._uC.call(); }
|
||||||
|
|
||||||
if (e === 1) {
|
if (e === 1) {
|
||||||
if (this._r > 0) {
|
if (this._r > 0) {
|
||||||
if ( this._r !== Infinity ) { this._r--; }
|
if ( this._r !== Infinity ) { this._r--; }
|
||||||
|
|
||||||
if (this._y) { this.reversed = !this.reversed; this.reverse(); } // handle yoyo
|
if (this._y) { this.reversed = !this.reversed; this.reverse(); } // handle yoyo
|
||||||
|
|
||||||
this._sT = (this._y && !this.reversed) ? t + this._rD : t; //set the right time for delay
|
this._sT = (this._y && !this.reversed) ? t + this._rD : t; //set the right time for delay
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
if (this._cC) { this._cC.call(); }
|
if (this._cC) { this._cC.call(); }
|
||||||
|
|
||||||
//stop preventing scroll when scroll tween finished
|
//stop preventing scroll when scroll tween finished
|
||||||
this.scrollOut();
|
this.scrollOut();
|
||||||
var i = 0, ctl = this._cT.length;
|
var i = 0, ctl = this._cT.length;
|
||||||
for (i; i < ctl; i++) {
|
for (i; i < ctl; i++) {
|
||||||
this._cT[i].start(this._sT + this._dr);
|
this._cT[i].start(this._sT + this._dr);
|
||||||
}
|
}
|
||||||
|
|
||||||
//stop ticking when finished
|
//stop ticking when finished
|
||||||
this.close();
|
this.close();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
w.stop = function () {
|
w.stop = function () {
|
||||||
if (!this.paused && this.playing) {
|
if (!this.paused && this.playing) {
|
||||||
K.remove(this);
|
K.remove(this);
|
||||||
this.playing = false;
|
this.playing = false;
|
||||||
this.paused = false;
|
this.paused = false;
|
||||||
this.scrollOut();
|
this.scrollOut();
|
||||||
|
|
||||||
if (this._stC !== null) {
|
if (this._stC !== null) {
|
||||||
this._stC.call();
|
this._stC.call();
|
||||||
}
|
}
|
||||||
this.stopChainedTweens();
|
this.stopChainedTweens();
|
||||||
this.close();
|
this.close();
|
||||||
}
|
}
|
||||||
|
@ -427,8 +427,8 @@
|
||||||
w.pause = function() {
|
w.pause = function() {
|
||||||
if (!this.paused && this.playing) {
|
if (!this.paused && this.playing) {
|
||||||
K.remove(this);
|
K.remove(this);
|
||||||
this.paused = true;
|
this.paused = true;
|
||||||
this._pST = window.performance.now();
|
this._pST = window.performance.now();
|
||||||
if (this._pC !== null) {
|
if (this._pC !== null) {
|
||||||
this._pC.call();
|
this._pC.call();
|
||||||
}
|
}
|
||||||
|
@ -436,13 +436,13 @@
|
||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
|
|
||||||
w.play = function () {
|
w.play = function () {
|
||||||
if (this.paused && this.playing) {
|
if (this.paused && this.playing) {
|
||||||
this.paused = false;
|
this.paused = false;
|
||||||
if (this._rC !== null) {
|
if (this._rC !== null) {
|
||||||
this._rC.call();
|
this._rC.call();
|
||||||
}
|
}
|
||||||
this._sT += window.performance.now() - this._pST;
|
this._sT += window.performance.now() - this._pST;
|
||||||
K.add(this);
|
K.add(this);
|
||||||
if (!_t) K.t(); // restart ticking if stopped
|
if (!_t) K.t(); // restart ticking if stopped
|
||||||
}
|
}
|
||||||
|
@ -456,13 +456,13 @@
|
||||||
for (var p in this._vE) {
|
for (var p in this._vE) {
|
||||||
var tmp = this._vSR[p];
|
var tmp = this._vSR[p];
|
||||||
this._vSR[p] = this._vE[p];
|
this._vSR[p] = this._vE[p];
|
||||||
this._vE[p] = tmp;
|
this._vE[p] = tmp;
|
||||||
this._vS[p] = this._vSR[p];
|
this._vS[p] = this._vSR[p];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
|
|
||||||
w.chain = function () { this._cT = arguments; return this; };
|
w.chain = function () { this._cT = arguments; return this; };
|
||||||
|
|
||||||
w.stopChainedTweens = function () {
|
w.stopChainedTweens = function () {
|
||||||
|
@ -471,14 +471,14 @@
|
||||||
this._cT[i].stop();
|
this._cT[i].stop();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
w.scrollOut = function(){ //prevent scroll when tweening scroll
|
w.scrollOut = function(){ //prevent scroll when tweening scroll
|
||||||
if ( 'scroll' in this._vE || 'scrollTop' in this._vE ) {
|
if ( 'scroll' in this._vE || 'scrollTop' in this._vE ) {
|
||||||
this.removeListeners();
|
this.removeListeners();
|
||||||
document.body.removeAttribute('data-tweening');
|
document.body.removeAttribute('data-tweening');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
w.scrollIn = function(){
|
w.scrollIn = function(){
|
||||||
if ( 'scroll' in this._vE || 'scrollTop' in this._vE ) {
|
if ( 'scroll' in this._vE || 'scrollTop' in this._vE ) {
|
||||||
if (!document.body.getAttribute('data-tweening') ) {
|
if (!document.body.getAttribute('data-tweening') ) {
|
||||||
|
@ -487,7 +487,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
w.addListeners = function () {
|
w.addListeners = function () {
|
||||||
document.addEventListener(_ev, K.preventScroll, false);
|
document.addEventListener(_ev, K.preventScroll, false);
|
||||||
};
|
};
|
||||||
|
@ -495,57 +495,57 @@
|
||||||
w.removeListeners = function () {
|
w.removeListeners = function () {
|
||||||
document.removeEventListener(_ev, K.preventScroll, false);
|
document.removeEventListener(_ev, K.preventScroll, false);
|
||||||
};
|
};
|
||||||
|
|
||||||
w.prS = function () { //prepare valuesStart for .to() method
|
w.prS = function () { //prepare valuesStart for .to() method
|
||||||
var f = {}, el = this._el, to = this._vS, cs = this.gIS('transform'), deg = ['rotate','skew'], ax = ['X','Y','Z'];
|
var f = {}, el = this._el, to = this._vS, cs = this.gIS('transform'), deg = ['rotate','skew'], ax = ['X','Y','Z'];
|
||||||
|
|
||||||
for (var p in to){
|
for (var p in to){
|
||||||
if ( _tf.indexOf(p) !== -1 ) {
|
if ( _tf.indexOf(p) !== -1 ) {
|
||||||
var r2d = (p === 'rotate' || p === 'translate' || p === 'scale');
|
var r2d = (p === 'rotate' || p === 'translate' || p === 'scale');
|
||||||
if ( /translate/.test(p) && p !== 'translate' ) {
|
if ( /translate/.test(p) && p !== 'translate' ) {
|
||||||
f['translate3d'] = cs['translate3d'] || _d[p];
|
f['translate3d'] = cs['translate3d'] || _d[p];
|
||||||
} else if ( r2d ) { // 2d transforms
|
} else if ( r2d ) { // 2d transforms
|
||||||
f[p] = cs[p] || _d[p];
|
f[p] = cs[p] || _d[p];
|
||||||
} else if ( !r2d && /rotate|skew/.test(p) ) { // all angles
|
} else if ( !r2d && /rotate|skew/.test(p) ) { // all angles
|
||||||
for (var d=0; d<2; d++) {
|
for (var d=0; d<2; d++) {
|
||||||
for (var a = 0; a<3; a++) {
|
for (var a = 0; a<3; a++) {
|
||||||
var s = deg[d]+ax[a];
|
var s = deg[d]+ax[a];
|
||||||
if (_tf.indexOf(s) !== -1 && (s in to) ) { f[s] = cs[s] || _d[s]; }
|
if (_tf.indexOf(s) !== -1 && (s in to) ) { f[s] = cs[s] || _d[s]; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ( _sc.indexOf(p) === -1 ) {
|
if ( _sc.indexOf(p) === -1 ) {
|
||||||
if (p === 'opacity' && _isIE8 ) { // handle IE8 opacity
|
if (p === 'opacity' && _isIE8 ) { // handle IE8 opacity
|
||||||
var co = this.gCS('filter');
|
var co = this.gCS('filter');
|
||||||
f['opacity'] = typeof co === 'number' ? co : _d['opacity'];
|
f['opacity'] = typeof co === 'number' ? co : _d['opacity'];
|
||||||
} else {
|
} else {
|
||||||
f[p] = this.gCS(p) || _d[p];
|
f[p] = this.gCS(p) || _d[p];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
f[p] = (el === null || el === undefined) ? (window.pageYOffset || _sct.scrollTop) : el.scrollTop;
|
f[p] = (el === null || el === undefined) ? (window.pageYOffset || _sct.scrollTop) : el.scrollTop;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for ( var p in cs ){ // also add to _vS values from previous tweens
|
for ( var p in cs ){ // also add to _vS values from previous tweens
|
||||||
if ( _tf.indexOf(p) !== -1 && (!( p in to )) ) {
|
if ( _tf.indexOf(p) !== -1 && (!( p in to )) ) {
|
||||||
f[p] = cs[p] || _d[p];
|
f[p] = cs[p] || _d[p];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return f;
|
return f;
|
||||||
};
|
};
|
||||||
|
|
||||||
w.gIS = function(p) { // gIS = get transform style for element from cssText for .to() method, the sp is for transform property
|
w.gIS = function(p) { // gIS = get transform style for element from cssText for .to() method, the sp is for transform property
|
||||||
if (!this._el) return; // if the scroll applies to `window` it returns as it has no styling
|
if (!this._el) return; // if the scroll applies to `window` it returns as it has no styling
|
||||||
var l = this._el, cst = l.style.cssText,//the cssText
|
var l = this._el, cst = l.style.cssText,//the cssText
|
||||||
trsf = {}; //the transform object
|
trsf = {}; //the transform object
|
||||||
// if we have any inline style in the cssText attribute, usually it has higher priority
|
// if we have any inline style in the cssText attribute, usually it has higher priority
|
||||||
var css = cst.replace(/\s/g,'').split(';'), i=0, csl = css.length;
|
var css = cst.replace(/\s/g,'').split(';'), i=0, csl = css.length;
|
||||||
for ( i; i<csl; i++ ){
|
for ( i; i<csl; i++ ){
|
||||||
if ( /transform/.test(css[i])) {
|
if ( /transform/.test(css[i])) {
|
||||||
var tps = css[i].split(':')[1].split(')'), k=0, tpl = tps.length; //all transform properties
|
var tps = css[i].split(':')[1].split(')'), k=0, tpl = tps.length; //all transform properties
|
||||||
for ( k; k< tpl; k++){
|
for ( k; k< tpl; k++){
|
||||||
var tp = tps[k].split('('); //each transform property
|
var tp = tps[k].split('('); //each transform property
|
||||||
if ( tp[0] !== '' && _tf.indexOf(tp) ){
|
if ( tp[0] !== '' && _tf.indexOf(tp) ){
|
||||||
trsf[tp[0]] = /translate3d/.test(tp[0]) ? tp[1].split(',') : tp[1];
|
trsf[tp[0]] = /translate3d/.test(tp[0]) ? tp[1].split(',') : tp[1];
|
||||||
}
|
}
|
||||||
|
@ -554,7 +554,7 @@
|
||||||
}
|
}
|
||||||
return trsf;
|
return trsf;
|
||||||
};
|
};
|
||||||
|
|
||||||
w.gCS = function (p) { // gCS = get style property for element from computedStyle for .to() method
|
w.gCS = function (p) { // gCS = get style property for element from computedStyle for .to() method
|
||||||
var el = this._el, cs = window.getComputedStyle(el) || el.currentStyle, //the computed style
|
var el = this._el, cs = window.getComputedStyle(el) || el.currentStyle, //the computed style
|
||||||
ppp = ( !_isIE8 && _pfT && ( /transform|Radius/.test(p) ) ) ? ('-'+ _pf.toLowerCase()+'-'+p) : p, //prefixed property for CSS match
|
ppp = ( !_isIE8 && _pfT && ( /transform|Radius/.test(p) ) ) ? ('-'+ _pf.toLowerCase()+'-'+p) : p, //prefixed property for CSS match
|
||||||
|
@ -569,26 +569,26 @@
|
||||||
return si;
|
return si;
|
||||||
} else {
|
} else {
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return _d[p];
|
return _d[p];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
w.close = function () {
|
w.close = function () {
|
||||||
var self = this;
|
var self = this;
|
||||||
setTimeout(function(){
|
setTimeout(function(){
|
||||||
var i = _tws.indexOf(self);
|
var i = _tws.indexOf(self);
|
||||||
if (i === _tws.length-1) { K.s(); }
|
if (i === _tws.length-1) { K.s(); }
|
||||||
if (self.repeat > 0) { self._r = self.repeat; }
|
if (self.repeat > 0) { self._r = self.repeat; }
|
||||||
if (self._y && self.reversed===true) { self.reverse(); self.reversed = false; }
|
if (self._y && self.reversed===true) { self.reverse(); self.reversed = false; }
|
||||||
self.playing = false;
|
self.playing = false;
|
||||||
},100)
|
},100)
|
||||||
};
|
};
|
||||||
|
|
||||||
// process properties
|
// process properties
|
||||||
K.prP = function (t, e) { // process tween properties for .fromTo() method
|
K.prP = function (t, e) { // process tween properties for .fromTo() method
|
||||||
var _st = {},
|
var _st = {},
|
||||||
tr = e === true ? _tfE : _tfS,
|
tr = e === true ? _tfE : _tfS,
|
||||||
tl = e === true ? _tlE : _tlS,
|
tl = e === true ? _tlE : _tlS,
|
||||||
|
@ -598,14 +598,14 @@
|
||||||
|
|
||||||
for (var x in t) {
|
for (var x in t) {
|
||||||
if (_tf.indexOf(x) !== -1) {
|
if (_tf.indexOf(x) !== -1) {
|
||||||
|
|
||||||
if (x !== 'translate' && /translate/.test(x)) { //process translate3d
|
|
||||||
var ta = ['X', 'Y', 'Z'], f = 0; //coordinates // translate[x] = pp(x, t[x]);
|
|
||||||
|
|
||||||
for (f; f < 3; f++) {
|
if (x !== 'translate' && /translate/.test(x)) { //process translate3d
|
||||||
|
var ta = ['X', 'Y', 'Z'], f = 0; //coordinates // translate[x] = pp(x, t[x]);
|
||||||
|
|
||||||
|
for (f; f < 3; f++) {
|
||||||
var a = ta[f];
|
var a = ta[f];
|
||||||
if ( /3d/.test(x) ) {
|
if ( /3d/.test(x) ) {
|
||||||
tl['translate' + a] = K.pp('translate' + a, t[x][f]);
|
tl['translate' + a] = K.pp('translate' + a, t[x][f]);
|
||||||
} else {
|
} else {
|
||||||
tl['translate' + a] = ('translate' + a in t) ? K.pp('translate' + a, t['translate' + a]) : { value: 0, unit: 'px' };
|
tl['translate' + a] = ('translate' + a in t) ? K.pp('translate' + a, t['translate' + a]) : { value: 0, unit: 'px' };
|
||||||
}
|
}
|
||||||
|
@ -613,15 +613,15 @@
|
||||||
|
|
||||||
tr['translate'] = tl;
|
tr['translate'] = tl;
|
||||||
} else if ( x !== 'rotate' && /rotate|skew/.test(x)) { //process rotation
|
} else if ( x !== 'rotate' && /rotate|skew/.test(x)) { //process rotation
|
||||||
var ap = /rotate/.test(x) ? 'rotate' : 'skew', ra = ['X', 'Y', 'Z'], r = 0,
|
var ap = /rotate/.test(x) ? 'rotate' : 'skew', ra = ['X', 'Y', 'Z'], r = 0,
|
||||||
_rt = {}, _sk = {}, rt = ap === 'rotate' ? _rt : _sk;
|
_rt = {}, _sk = {}, rt = ap === 'rotate' ? _rt : _sk;
|
||||||
for (r; r < 3; r++) {
|
for (r; r < 3; r++) {
|
||||||
var v = ra[r];
|
var v = ra[r];
|
||||||
if ( t[ap+v] !== undefined && x !== 'skewZ' ) {
|
if ( t[ap+v] !== undefined && x !== 'skewZ' ) {
|
||||||
rt[ap+v] = K.pp(ap + v, t[ap+v]);
|
rt[ap+v] = K.pp(ap + v, t[ap+v]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tr[ap] = rt;
|
tr[ap] = rt;
|
||||||
} else if ( x === 'translate' || x === 'rotate' || x === 'scale' ) { //process 2d translation / rotation
|
} else if ( x === 'translate' || x === 'rotate' || x === 'scale' ) { //process 2d translation / rotation
|
||||||
tr[x] = K.pp(x, t[x]);
|
tr[x] = K.pp(x, t[x]);
|
||||||
|
@ -635,13 +635,13 @@
|
||||||
}
|
}
|
||||||
return _st;
|
return _st;
|
||||||
};
|
};
|
||||||
|
|
||||||
// _cls _sc _op _bm _tp _bg _tf
|
// _cls _sc _op _bm _tp _bg _tf
|
||||||
K.pp = function(p, v) {//process single property
|
K.pp = function(p, v) {//process single property
|
||||||
if (_tf.indexOf(p) !== -1) {
|
if (_tf.indexOf(p) !== -1) {
|
||||||
var t = p.replace(/X|Y|Z/, ''), tv;
|
var t = p.replace(/X|Y|Z/, ''), tv;
|
||||||
if (p === 'translate3d') {
|
if (p === 'translate3d') {
|
||||||
tv = v.split(',');
|
tv = v.split(',');
|
||||||
return {
|
return {
|
||||||
translateX : { value: K.truD(tv[0]).v, unit: K.truD(tv[0]).u },
|
translateX : { value: K.truD(tv[0]).v, unit: K.truD(tv[0]).u },
|
||||||
translateY : { value: K.truD(tv[1]).v, unit: K.truD(tv[1]).u },
|
translateY : { value: K.truD(tv[1]).v, unit: K.truD(tv[1]).u },
|
||||||
|
@ -658,7 +658,7 @@
|
||||||
t2d.y = { value: K.truD(tv[1]).v, unit: K.truD(tv[1]).u }
|
t2d.y = { value: K.truD(tv[1]).v, unit: K.truD(tv[1]).u }
|
||||||
} else {
|
} else {
|
||||||
t2d.x = { value: K.truD(tv).v, unit: K.truD(tv).u },
|
t2d.x = { value: K.truD(tv).v, unit: K.truD(tv).u },
|
||||||
t2d.y = { value: 0, unit: 'px' }
|
t2d.y = { value: 0, unit: 'px' }
|
||||||
}
|
}
|
||||||
return t2d;
|
return t2d;
|
||||||
} else if (p === 'rotate') {
|
} else if (p === 'rotate') {
|
||||||
|
@ -681,36 +681,36 @@
|
||||||
if (_clp.indexOf(p) !== -1) {
|
if (_clp.indexOf(p) !== -1) {
|
||||||
if ( v instanceof Array ){
|
if ( v instanceof Array ){
|
||||||
return [ K.truD(v[0]), K.truD(v[1]), K.truD(v[2]), K.truD(v[3]) ];
|
return [ K.truD(v[0]), K.truD(v[1]), K.truD(v[2]), K.truD(v[3]) ];
|
||||||
} else {
|
} else {
|
||||||
var ci;
|
var ci;
|
||||||
if ( /rect/.test(v) ) {
|
if ( /rect/.test(v) ) {
|
||||||
ci = v.replace(/rect|\(|\)/g,'').split(/\s|\,/);
|
ci = v.replace(/rect|\(|\)/g,'').split(/\s|\,/);
|
||||||
} else if ( /auto|none|initial/.test(v) ){
|
} else if ( /auto|none|initial/.test(v) ){
|
||||||
ci = _d[p];
|
ci = _d[p];
|
||||||
}
|
}
|
||||||
return [ K.truD(ci[0]), K.truD(ci[1]), K.truD(ci[2]), K.truD(ci[3]) ];
|
return [ K.truD(ci[0]), K.truD(ci[1]), K.truD(ci[2]), K.truD(ci[3]) ];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (_cls.indexOf(p) !== -1) {
|
if (_cls.indexOf(p) !== -1) {
|
||||||
return { value: K.truC(v) };
|
return { value: K.truC(v) };
|
||||||
}
|
}
|
||||||
if (_bg.indexOf(p) !== -1) {
|
if (_bg.indexOf(p) !== -1) {
|
||||||
if ( v instanceof Array ){
|
if ( v instanceof Array ){
|
||||||
return { x: K.truD(v[0])||{ v: 50, u: '%' }, y: K.truD(v[1])||{ v: 50, u: '%' } };
|
return { x: K.truD(v[0])||{ v: 50, u: '%' }, y: K.truD(v[1])||{ v: 50, u: '%' } };
|
||||||
} else {
|
} else {
|
||||||
var posxy = v.replace(/top|left/g,0).replace(/right|bottom/g,100).replace(/center|middle/,50).split(/\s|\,/g),
|
var posxy = v.replace(/top|left/g,0).replace(/right|bottom/g,100).replace(/center|middle/,50).split(/\s|\,/g),
|
||||||
xp = K.truD(posxy[0]), yp = K.truD(posxy[1]);
|
xp = K.truD(posxy[0]), yp = K.truD(posxy[1]);
|
||||||
return { x: xp, y: yp };
|
return { x: xp, y: yp };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (_rd.indexOf(p) !== -1) {
|
if (_rd.indexOf(p) !== -1) {
|
||||||
var rad = K.truD(v);
|
var rad = K.truD(v);
|
||||||
return { value: rad.v, unit: rad.u };
|
return { value: rad.v, unit: rad.u };
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
K.truD = function (d,p) { //true dimension returns { v = value, u = unit }
|
K.truD = function (d,p) { //true dimension returns { v = value, u = unit }
|
||||||
var x = parseInt(d) || 0, mu = ['px','%','deg','rad','em','rem','vh','vw'], l = mu.length,
|
var x = parseInt(d) || 0, mu = ['px','%','deg','rad','em','rem','vh','vw'], l = mu.length,
|
||||||
y = getU();
|
y = getU();
|
||||||
function getU() {
|
function getU() {
|
||||||
var u,i=0;
|
var u,i=0;
|
||||||
|
@ -720,14 +720,14 @@
|
||||||
}
|
}
|
||||||
return { v: x, u: y };
|
return { v: x, u: y };
|
||||||
};
|
};
|
||||||
|
|
||||||
K.preventScroll = function (e) { // prevent mousewheel or touch events while tweening scroll
|
K.preventScroll = function (e) { // prevent mousewheel or touch events while tweening scroll
|
||||||
var data = document.body.getAttribute('data-tweening');
|
var data = document.body.getAttribute('data-tweening');
|
||||||
if (data && data === 'scroll') {
|
if (data && data === 'scroll') {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
K.truC = function (v) { // replace transparent and transform any color to rgba()/rgb()
|
K.truC = function (v) { // replace transparent and transform any color to rgba()/rgb()
|
||||||
var vrgb, y;
|
var vrgb, y;
|
||||||
if (/rgb|rgba/.test(v)) { //rgb will be fastest initialized
|
if (/rgb|rgba/.test(v)) { //rgb will be fastest initialized
|
||||||
|
@ -745,7 +745,7 @@
|
||||||
return { r: 0, g: 0, b: 0, a: 0 };
|
return { r: 0, g: 0, b: 0, a: 0 };
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
K.rth = function (r, g, b) { // transform rgb to hex or vice-versa | webkit browsers ignore HEX, always use RGB/RGBA
|
K.rth = function (r, g, b) { // transform rgb to hex or vice-versa | webkit browsers ignore HEX, always use RGB/RGBA
|
||||||
return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
|
return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
|
||||||
};
|
};
|
||||||
|
@ -762,34 +762,34 @@
|
||||||
g: parseInt(result[2], 16),
|
g: parseInt(result[2], 16),
|
||||||
b: parseInt(result[3], 16)
|
b: parseInt(result[3], 16)
|
||||||
} : null;
|
} : null;
|
||||||
};
|
};
|
||||||
|
|
||||||
K.pe = function (es) { //process easing
|
K.pe = function (es) { //process easing
|
||||||
if ( typeof es === 'function') {
|
if ( typeof es === 'function') {
|
||||||
return es;
|
return es;
|
||||||
} else if ( typeof es === 'string' ) {
|
} else if ( typeof es === 'string' ) {
|
||||||
if ( /easing|linear/.test(es) ) {
|
if ( /easing|linear/.test(es) ) {
|
||||||
return K.Easing[es]; //regular Robert Penner Easing Functions
|
return K.Easing[es]; //regular Robert Penner Easing Functions
|
||||||
} else if ( /bezier/.test(es) ) {
|
} else if ( /bezier/.test(es) ) {
|
||||||
var bz = es.replace(/bezier|\s|\(|\)/g,'').split(','), i = 0, l = bz.length;
|
var bz = es.replace(/bezier|\s|\(|\)/g,'').split(','), i = 0, l = bz.length;
|
||||||
for (i; i<l;i++) { bz[i] = parseFloat(bz[i]); }
|
for (i; i<l;i++) { bz[i] = parseFloat(bz[i]); }
|
||||||
return K.Ease.bezier(bz[0],bz[1],bz[2],bz[3]); //bezier easing
|
return K.Ease.bezier(bz[0],bz[1],bz[2],bz[3]); //bezier easing
|
||||||
} else if ( /physics/.test(es) ) {
|
} else if ( /physics/.test(es) ) {
|
||||||
return K.Physics[es](); // predefined physics bezier based easing functions
|
return K.Physics[es](); // predefined physics bezier based easing functions
|
||||||
} else {
|
} else {
|
||||||
return K.Ease[es](); // predefined bezier based easing functions
|
return K.Ease[es](); // predefined bezier based easing functions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
K.Easing = {}; // we build nice ease objects here
|
K.Easing = {}; // we build nice ease objects here
|
||||||
|
|
||||||
//high performance for accuracy (smoothness) trade
|
//high performance for accuracy (smoothness) trade
|
||||||
K.Easing.linear = function (t) { return t; };
|
K.Easing.linear = function (t) { return t; };
|
||||||
|
|
||||||
var _PI = Math.PI, _2PI = Math.PI * 2, _hPI = Math.PI / 2,
|
var _PI = Math.PI, _2PI = Math.PI * 2, _hPI = Math.PI / 2,
|
||||||
_kea = 0.1, _kep = 0.4;
|
_kea = 0.1, _kep = 0.4;
|
||||||
|
|
||||||
K.Easing.easingSinusoidalIn = function(t) { return -Math.cos(t * _hPI) + 1; };
|
K.Easing.easingSinusoidalIn = function(t) { return -Math.cos(t * _hPI) + 1; };
|
||||||
K.Easing.easingSinusoidalOut = function(t) { return Math.sin(t * _hPI); };
|
K.Easing.easingSinusoidalOut = function(t) { return Math.sin(t * _hPI); };
|
||||||
K.Easing.easingSinusoidalInOut = function(t) { return -0.5 * (Math.cos(_PI * t) - 1); };
|
K.Easing.easingSinusoidalInOut = function(t) { return -0.5 * (Math.cos(_PI * t) - 1); };
|
||||||
|
@ -835,21 +835,21 @@
|
||||||
};
|
};
|
||||||
K.Easing.easingBounceIn = function(t) { return 1 - K.Easing.easingBounceOut( 1 - t ); };
|
K.Easing.easingBounceIn = function(t) { return 1 - K.Easing.easingBounceOut( 1 - t ); };
|
||||||
K.Easing.easingBounceOut = function(t) {
|
K.Easing.easingBounceOut = function(t) {
|
||||||
if ( t < ( 1 / 2.75 ) ) { return 7.5625 * t * t; }
|
if ( t < ( 1 / 2.75 ) ) { return 7.5625 * t * t; }
|
||||||
else if ( t < ( 2 / 2.75 ) ) { return 7.5625 * ( t -= ( 1.5 / 2.75 ) ) * t + 0.75; }
|
else if ( t < ( 2 / 2.75 ) ) { return 7.5625 * ( t -= ( 1.5 / 2.75 ) ) * t + 0.75; }
|
||||||
else if ( t < ( 2.5 / 2.75 ) ) { return 7.5625 * ( t -= ( 2.25 / 2.75 ) ) * t + 0.9375; }
|
else if ( t < ( 2.5 / 2.75 ) ) { return 7.5625 * ( t -= ( 2.25 / 2.75 ) ) * t + 0.9375; }
|
||||||
else {return 7.5625 * ( t -= ( 2.625 / 2.75 ) ) * t + 0.984375; }
|
else {return 7.5625 * ( t -= ( 2.625 / 2.75 ) ) * t + 0.984375; }
|
||||||
};
|
};
|
||||||
K.Easing.easingBounceInOut = function(t) { if ( t < 0.5 ) return K.Easing.easingBounceIn( t * 2 ) * 0.5; return K.Easing.easingBounceOut( t * 2 - 1 ) * 0.5 + 0.5;};
|
K.Easing.easingBounceInOut = function(t) { if ( t < 0.5 ) return K.Easing.easingBounceIn( t * 2 ) * 0.5; return K.Easing.easingBounceOut( t * 2 - 1 ) * 0.5 + 0.5;};
|
||||||
|
|
||||||
//returns browser prefix
|
//returns browser prefix
|
||||||
function getPrefix() {
|
function getPrefix() {
|
||||||
var div = document.createElement('div'), i = 0, pf = ['Moz', 'moz', 'Webkit', 'webkit', 'O', 'o', 'Ms', 'ms'], pl = pf.length,
|
var div = document.createElement('div'), i = 0, pf = ['Moz', 'moz', 'Webkit', 'webkit', 'O', 'o', 'Ms', 'ms'], pl = pf.length,
|
||||||
s = ['MozTransform', 'mozTransform', 'WebkitTransform', 'webkitTransform', 'OTransform', 'oTransform', 'MsTransform', 'msTransform'];
|
s = ['MozTransform', 'mozTransform', 'WebkitTransform', 'webkitTransform', 'OTransform', 'oTransform', 'MsTransform', 'msTransform'];
|
||||||
|
|
||||||
for (i; i < pl; i++) { if (s[i] in div.style) { return pf[i]; } }
|
for (i; i < pl; i++) { if (s[i] in div.style) { return pf[i]; } }
|
||||||
div = null;
|
div = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return K;
|
return K;
|
||||||
}));
|
}));
|
||||||
|
|
25
package.json
Normal file
25
package.json
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
{
|
||||||
|
"name": "kute.js",
|
||||||
|
"version": "0.9.4",
|
||||||
|
"description": "A minimal Native Javascript animation engine with jQuery plugin.",
|
||||||
|
"main": "kute.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/thednp/kute.js.git"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"kute.js",
|
||||||
|
"animation",
|
||||||
|
"animations",
|
||||||
|
"native-javascript"
|
||||||
|
],
|
||||||
|
"author": "thednp",
|
||||||
|
"license": "MIT",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/thednp/kute.js/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/thednp/kute.js#readme"
|
||||||
|
}
|
Loading…
Reference in a new issue