Skip to content

Commit

Permalink
Add ChangeLog.md.
Browse files Browse the repository at this point in the history
Optimize easing functions that delete all redundant `else` keywords.
Add boundary test in some easing functions.
  • Loading branch information
scottcgi committed Dec 19, 2019
1 parent 56ee5b7 commit d641b56
Show file tree
Hide file tree
Showing 3 changed files with 121 additions and 91 deletions.
6 changes: 6 additions & 0 deletions ChangeLog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
## v2.0.1
_`2019.12.18 UTC+8 21:32`_
* Optimize easing functions that delete all redundant `else` keywords.
* Add boundary test in some easing functions.


13 changes: 11 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,16 @@
MojoJS v2.0.0
MojoJS v2.0.1
=============

MojoJS is a JavaScript library that includes [**Animation Engine**](#animation-engine) and [**CSS Selector Engine**](#css-selector-engine). And it's licensed under the [MIT License](https://github.com/scottcgi/MojoJS/blob/master/LICENSE "Mojoc Under MIT License").
MojoJS is a JavaScript library that includes [**Animation Engine**](#animation-engine) and [**CSS Selector Engine**](#css-selector-engine).

* Released version in [releases](https://github.com/scottcgi/MojoJS/releases).
* Release changes in [ChangeLog](https://github.com/scottcgi/MojoJS/blob/master/ChangeLog.md).


### License

MojoJS is licensed under the [MIT License](https://github.com/scottcgi/MojoJS/blob/master/LICENSE "Mojoc Under MIT License").


### Animation Engine

Expand Down
193 changes: 104 additions & 89 deletions animation/MojoJS.animation.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/**
* Copyright (c) 2012-2019 scott.cgi All Rights Reserved.
*
* This source code belongs to project MojocJS, which is an animation Engine hosted on GitHub,
* This source code belongs to project MojoJS, which is an animation Engine hosted on GitHub,
* and licensed under the MIT License.
*
* License: https://github.com/scottcgi/MojoJS/blob/master/LICENSE
Expand Down Expand Up @@ -707,17 +707,16 @@

//---------------------------------------------------------------------------------------------------------------------


animator.unitEl.style.cssText = "position:absolute;width:0;display:block;";
animator.unitEl.id = "MojoJS-animation-unitEl";


/**
* The original algorithms of easing functions come from Robert Penner
* http://robertpenner.com/easing/
*
* The licenses are MIT and BSD
* http://robertpenner.com/easing_terms_of_use.html
* The original algorithms of easing functions come from Robert Penner.
* The open source licensed under the MIT License and the BSD License.
*
* Introduce: http://robertpenner.com/easing
* License : http://robertpenner.com/easing_terms_of_use.html
*/
animator.easing = {

Expand All @@ -735,9 +734,9 @@
quadraticInOut: function(time) {
if (time < 0.5) {
return time * time * 2.0;
} else {
return (2.0 * time * (2.0 - time) - 1.0);
}
}

return 2.0 * time * (2.0 - time) - 1.0;
},


Expand All @@ -746,15 +745,15 @@
},
cubicOut: function(time) {
time -= 1.0;
return (time * time * time + 1.0);
return time * time * time + 1.0;
},
cubicInOut: function(time) {
if (time < 0.5) {
return 4.0 * time * time * time;
} else {
time -= 1.0;
return 4.0 * time * time * time + 1.0;
}
}

time -= 1.0;
return 4.0 * time * time * time + 1.0;
},


Expand All @@ -763,15 +762,15 @@
},
quarticOut: function(time) {
time -= 1.0;
return time * time * time * (-time) + 1.0;
return 1.0 - time * time * time * time;
},
quarticInOut: function(time) {
if (time < 0.5) {
return 8.0 * time * time * time * time;
} else {
time -= 1.0;
return (-8.0 * time * time * time * time + 1.0);
}
}

time -= 1.0;
return 1.0 - 8.0 * time * time * time * time;
},


Expand All @@ -785,47 +784,47 @@
quinticInOut: function(time) {
if (time < 0.5) {
return 16.0 * time * time * time * time * time;
} else {
time -= 1.0;
return 16.0 * time * time * time * time * time + 1.0;
}
}

time -= 1.0;
return 16.0 * time * time * time * time * time + 1.0;
},


exponentialIn: function(time) {
if (time === 0.0) {
if (time <= 0.0) {
return time;
} else {
return Math.pow(2.0, 10.0 * (time - 1.0));
}
}

return Math.pow(2.0, 10.0 * (time - 1.0));
},
exponentialOut: function(time) {
if (time === 1.0) {
if (time >= 1.0) {
return time;
} else {
return 1.0 - Math.pow(2.0, -10.0 * time);
}

return 1.0 - Math.pow(2.0, -10.0 * time);
},
exponentialInOut: function(time) {
if (time === 0.0 || time === 1.0) {
if (time <= 0.0 || time >= 1.0) {
return time;
}

if (time < 0.5) {
return 0.5 * Math.pow(2.0, 20.0 * time - 10.0);
} else {
return 0.5 * (2.0 - Math.pow(2.0, -20.0 * time + 10.0));
}
}

return 0.5 * (2.0 - Math.pow(2.0, -20.0 * time + 10.0));
},


sineIn: function(time) {
return 1.0 - Math.cos(time * 1.570796326794897);
},
sineOut: function(time, M) {
sineOut: function(time) {
return Math.sin(time * 1.570796326794897);
},
sineInOut: function(time, M) {
sineInOut: function(time) {
return 0.5 * (1.0 - Math.cos(time * 3.141592653589793));
},

Expand All @@ -839,39 +838,39 @@
circularInOut: function(time) {
if (time < 0.5) {
return 0.5 * (1.0 - Math.sqrt(1.0 - 4.0 * time * time));
} else {
time = time * 2.0 - 2.0;
return 0.5 * (Math.sqrt(1.0 - time * time) + 1.0);
}

time = time * 2.0 - 2.0;
return 0.5 * (Math.sqrt(1.0 - time * time) + 1.0);
},


elasticIn: function(time) {
if (time === 0.0 || time === 1.0)
if (time <= 0.0 || time >= 1.0)
{
return time;
}

return -Math.pow(2.0, 10.0 * time - 10.0) * Math.sin((3.33 * time - 3.58) * 6.283185307179586);
},
elasticOut: function(time) {
if (time === 0.0 || time === 1.0)
if (time <= 0.0 || time >= 1.0)
{
return time;
}

return Math.pow(2.0, -10.0 * time) * Math.sin((3.33 * time - 0.25) * 6.283185307179586) + 1.0;
},
elasticInOut: function(time) {
if (time === 0.0 || time === 1.0) {
if (time <= 0.0 || time >= 1.0) {
return time;
}

if (time < 0.5) {
return -0.5 * Math.pow(2.0, 20.0 * time - 10.0) * Math.sin((4.45 * time - 2.475) * 6.283185307179586);
} else {
return Math.pow(2.0, -20.0 * time + 10.0) * Math.sin((4.45 * time - 2.475) * 6.283185307179586) * 0.5 + 1.0;
}
}

return Math.pow(2.0, -20.0 * time + 10.0) * Math.sin((4.45 * time - 2.475) * 6.283185307179586) * 0.5 + 1.0;
},


Expand All @@ -885,100 +884,116 @@
backInOut: function(time) {
if (time < 0.5) {
return time * time * (14.379636 * time - 5.189818);
} else {
time -= 1.0;
return time * time * (14.379636 * time + 5.189818) + 1.0;
}
}

time -= 1.0;
return time * time * (14.379636 * time + 5.189818) + 1.0;
},
backInExponentialOut: function(time) {
if (time < 0.5) {
return time * time * (14.379636 * time - 5.189818);
} else {
return 0.5 * (2.0 - Math.pow(2.0, -20.0 * time + 10.0));
}
}

return 0.5 * (2.0 - Math.pow(2.0, -20.0 * time + 10.0));
},
backInElasticOut: function(time) {
if (time < 0.5) {
return time * time * (14.379636 * time - 5.189818);
} else {
return Math.pow(2.0, -20.0 * time + 10.0) * Math.sin((4.45 * time - 2.475) * 6.283185307179586) * 0.5 + 1.0;
}
}

return Math.pow(2.0, -20.0 * time + 10.0) * Math.sin((4.45 * time - 2.475) * 6.283185307179586) * 0.5 + 1.0;
},


bounceIn: function(time) {
if (time > 0.636364) {
time = 1.0 - time;
return 1.0 - 7.5625 * time * time;
} else if (time > 0.27273) {
}

if (time > 0.27273) {
time = 0.454546 - time;
return 0.25 - 7.5625 * time * time;
} else if (time > 0.090909) {
}

if (time > 0.090909) {
time = 0.181818 - time;
return 0.0625 - 7.5625 * time * time;
} else {
if (time === 1.0) {
return time;
}

time = 0.045455 - time;
return 0.015625 - 7.5625 * time * time;
}

if (time >= 1.0) {
return time;
}

time = 0.045455 - time;
return 0.015625 - 7.5625 * time * time;
},
bounceOut: function(time) {
if (time < 0.363636) {
return 7.5625 * time * time;
} else if (time < 0.72727) {
}

if (time < 0.72727) {
time -= 0.545454;
return 7.5625 * time * time + 0.75;
} else if (time < 0.909091) {
}

if (time < 0.909091) {
time -= 0.818182;
return 7.5625 * time * time + 0.9375;
} else {
if (time === 1.0) {
return time;
}

time -= 0.954545;
return 7.5625 * time * time + 0.984375;
}

if (time >= 1.0) {
return time;
}

time -= 0.954545;
return 7.5625 * time * time + 0.984375;
},
bounceInOut: function(time) {
if (time < 0.5) {
// bounce in
if (time > 0.318182) {
time = 1.0 - time * 2.0;
return 0.5 - 3.78125 * time * time;
} else if (time > 0.136365) {
}

if (time > 0.136365) {
time = 0.454546 - time * 2.0;
return 0.125 - 3.78125 * time * time;
} else if (time > 0.045455) {
}

if (time > 0.045455) {
time = 0.181818 - time * 2.0;
return 0.03125 - 3.78125 * time * time;
} else {
time = 0.045455 - time * 2.0;
return 0.007813 - 3.78125 * time * time;
}
}

time = 0.045455 - time * 2.0;
return 0.007813 - 3.78125 * time * time;
}

// bounce out
if (time < 0.681818) {
time = time * 2.0 - 1.0;
return 3.78125 * time * time + 0.5;
} else if (time < 0.863635) {
}

if (time < 0.863635) {
time = time * 2.0 - 1.545454;
return 3.78125 * time * time + 0.875;
} else if (time < 0.954546) {
}

if (time < 0.954546) {
time = time * 2.0 - 1.818182;
return 3.78125 * time * time + 0.96875;
} else {
if (time === 1.0) {
return time;
}

time = time * 2.0 - 1.954545;
return 3.78125 * time * time + 0.992188;
}

if (time >= 1.0) {
return time;
}

time = time * 2.0 - 1.954545;
return 3.78125 * time * time + 0.992188;
},
};

Expand Down

0 comments on commit d641b56

Please sign in to comment.