Repository files navigation

AnimateJS

AnimateJS is a user-friendly library that simplifies creating smooth 2D and 3D animations using JavaScript and CSS. Ideal for adding dynamic, engaging effects to your web projects with minimal effort.

Check out the2D demo or 3D demo

Startup

To include the the script use the HTML code here

<!DOCTYPE html><html><head><linkrel="stylesheet" href="/path/to/animate.min.css"/><linkrel="stylesheet" href="/path/to/animate_draw.min.css"/></head><body>
...
<scriptsrc="/path/to/animate.min.js"></script><scriptsrc="index.js"></script></body></html>

OR jsDelivr

<linkrel="stylesheet" href="https://cdn.jsdelivr.net/gh/XHiddenProjects/AnimateJS@1.0.2/animate.min.css"/><linkrel="stylesheet" href="https://cdn.jsdelivr.net/gh/XHiddenProjects/AnimateJS@1.0.2/animate_draw.min.css"/><scriptsrc="https://cdn.jsdelivr.net/gh/XHiddenProjects/AnimateJS@1.0.2/animate.min.js"></script>

Animating

To use the animate your object use the animate() method

constanimate=newAnimateJS(),[container]=animate.Utils.$('.my-cube');/** * Trigger animation on an element based on predefined animation paths * @param {Element} el - DOM element to animate * @param {string} animationPath - dot-separated path to animation in Animations * @param {{timing: 'linear'|'ease'|'ease-in'|'ease-out'|'ease-in-out'|'cubic-bezier(n,n,n,n)', duration: number, delay: number, count: number, direction: 'normal'|'reverse'|'alternate'|'alternate-reverse' , mode: 'none'|'forwards'|'backwards'|'both'}} options - animation options like duration, delay etc. * @returns {Promise} - resolves after animation ends */animate.animate(container,'fade.in').then(()=>{// Send a console message when animation is doneconsole.log('Animation done!');});

You can check out the in-built animations


Running multiple animations (Sequentially)

To execute animation as step process you will have to use the run() method

constanimate=newAnimateJS(),[myElement]=animate.Utils.$('.my-cube');// Run animations sequentiallyanimate.run(()=>animate.animate(myElement,'fade.in',{duration: 1000}),()=>animate.animate(myElement,'rotate.clockwise',{duration: 1000,delay: 500}),()=>animate.animate(myElement,'slide.outRight',{duration: 1000,delay: 500}));

Custom Animations

To create custom animation you will need 2 classes AnimationJS() and KeyFrames()

Here is an example:

constanimate=newAnimateJS(),[container]=animate.Utils.$('.text');constframe=newKeyFrames();// AnimationJS(pathName); The path would be "custom.rainbow"constrainbowTextAnimation=newAnimationJS('custom','rainbow')// createTimeline(percentage|from-to, KeyFrames).createTimeline('0',frame.fontShadow({v:0,h:0,blur:2,color:'red'}).color('red')).createTimeline('20',frame.clear().fontShadow({v:0,h:0,blur:2,color:'orange'}).color('orange')).createTimeline('40',frame.clear().fontShadow({v:0,h:0,blur:2,color:'yellow'}).color('yellow')).createTimeline('60',frame.clear().fontShadow({v:0,h:0,blur:2,color:'green'}).color('green')).createTimeline('80',frame.clear().fontShadow({v:0,h:0,blur:2,color:'blue'}).color('blue')).createTimeline('100',frame.clear().fontShadow({v:0,h:0,blur:2,color:'purple'}).color('purple')).develop();// Add it to AnimateJS instanceanimate.add(rainbowTextAnimation);animate.animate(container,'custom.rainbow',{timing: animate.EASE_IN_OUT,duration: animate.SLOW,mode: animate.FORWARDS,count: animate.INFINITE});

KeyFrames

Keyframes are what is placed inside each timeline

Methods:

MethodsCodeDescription
RotateRotate(degree)Rotate the object by degree
RotateXRotateX(degree)Rotate the object by X-axis
RotateYRotateY(degree)Rotate the object by Y-axis
RotateZRotateZ(degree)Rotate the object by Z-axis
Rotate3DRotate3D(x, y, z, degree)Rotate the object by 3D
skewskew(xDeg, yDeg)Skew the object
skewXskewX(xDeg)Skew the object by x-axis
skewYskewY(yDeg)Skew the object by y-axis
ScaleScale(sx, sy)Scale the object by size
ScaleXScaleX(sx)Scale the object by X-axis
ScaleYScaleY(sy)Scale the object by Y-axis
ScaleZScaleZ(sz)Scale the object by Z-axis
Scale3DScale3D(sx, sy, sz)Scale the object by 3D
perspectiveperspective(distance)Adds perspective transformation.
transitiontransition(...string)transition properties
borderborder(width, style, color, ...locations)Border style
boxShadowboxShadow(...{h:number, v: number, blur: number, spread: number, color: string})Box shadow to object
fontShadowfontShadow(...{h:number, v:number, blur: number, color: string})Text shadow to object
colorcolor(color)Color to object
opacityopacity(value)Opacity to object
backgroundbackground(...backgrounds)Combines background values
matrixmatrix(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)Applies a 4x4 matrix transformation.
matrix3Dmatrix3D(a1, b1, c1, d1, a2, b2, c2, d2, a3, b3, c3, d3, a4, b4, c4, d4)Applies a 3D matrix transformation.
clearclear()clears everything to default

Utilities

Here are some utities that can be used

inView

Sends a boolean whether or not the page is focued on an item

/** * Checks if an element is within the viewport * @param {Element} el - DOM element to check * @returns {boolean} - TRUE if in view, else FALSE */animate.Utils.inView(el);

$

Selects all elements based on the selected query: document.querySelectorAll()

/** * Selects all elements under target selector. * **Reference:** _(document.querySelectorAll)_ * @param {string} el CSS selector * @returns {NodeList} Returns all element descendants of node that match selectors. */animate.Utils.$(el);

$$

Selects first element based on the selected query: document.querySelector()

/** * Selects an element under target selector. * **Reference:** _(document.querySelector)_ * @param {string} el CSS selector * @returns {any} Returns the first element that is a descendant of node that matches selectors. */animate.Utils.$S(el);

Merger

Merges animations from the current animation

/** * Merges a new animation string with existing styles * @param {Element} el - DOM element * @param {string} animation - animation string to merge */animate.Utils.Merger(el,animation);

contrast

Returns the contrast between two colors

/** * Returns the contrast ratio between 2 colors * @param {string} color1 Background color * @param {string} color2 Fore color * @returns {number} Ratio between to colors  */animate.Utils.contrast(color1,color2)

CONSTANTS

Here are some constants that will make things easier for you

Count

ConstantValue
INFINITE-1

Timing

ConstantValue
EASE'ease'
LINEAR'linear'
EASE_IN'ease-in'
EASE_IN_OUT'ease-in-out'
EASE_OUT'ease-out'
CUBIC_BEZIERCUBIC_BEZIER(x1,y1,x2,y2)

Direction

ConstantValue
NORMAL'normal'
REVERSE'reverse'
ALT'alternate'
ALT_REVERSE'alternate-reverse'

Mode

ConstantValue
NONE'none'
FORWARDS'forwards'
BACKWARDS'backwards'
BOTH'both'

Speed

ConstantValue
SUPER_SLOW5000
SLOW3000
MODERATE1000
FAST500
SUPER_FAST200

Colors

ConstantValue
RED'#ff0000'
BROWN'#a52a2a'
TAN'#d2b48c'
ORANGE'#ffa500'
YELLOW'#ffff00'
GOLD'#ffd700'
GREEN'#008000'
LIME'#00ff00'
BLUE'#0000ff'
CYAN'#00ffff'
NAVY'#000080'
PURPLE'#800080'
MAGENTA'#ff00ff'
GRAY'#808080'
LIGHT_GRAY'#d3d3d3'
PINK'#ffc0cb'
BLACK'#000'
WHITE'#FFF'

Transparency

ConstantValue
OPACITY1
OPACITY_HALF0.5
NO_OPACITY0

Built in animations

AnimationPath
FadeInfade.in
FadeOutfade.out
FadeInTopfade.inTop
FadeOutTopfade.outTop
FadeInRightfade.inRight
FadeOutRightfade.outRight
FadeInBottomfade.inBottom
FadeOutBottomfade.outBottom
FadeInLeftfade.inLeft
FadeOutLeftfade.outLeft
SlideInslide.in
SlideOutslide.out
SlideInTopslide.inTop
SlideOutTopslide.outTop
SlideInRightslide.inRight
SlideOutRightslide.outRight
SlideInBottomslide.inBottom
SlideOutBottomslide.outBottom
SlideInLeftslide.inLeft
SlideOutLeftslide.outLeft
rotateInrotate.in
rotateOutrotate.Out
rotateClockwiserotate.clockwise
rotateCounterClockwiserotate.counterClockwise
zoomInzoom.in
zoomOutzoom.out
bouncebounce
stretchWidthstretch.width
stretchHeightstretch.height

About

Easy to use animation written in JS and CSS using 2D and 3D animations.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

AnimateJS

AnimateJS is a user-friendly library that simplifies creating smooth 2D and 3D animations using JavaScript and CSS. Ideal for adding dynamic, engaging effects to your web projects with minimal effort.

Check out the2D demo or 3D demo

Startup

To include the the script use the HTML code here

<!DOCTYPE html><html><head><linkrel="stylesheet" href="/path/to/animate.min.css"/><linkrel="stylesheet" href="/path/to/animate_draw.min.css"/></head><body>
...
<scriptsrc="/path/to/animate.min.js"></script><scriptsrc="index.js"></script></body></html>

OR jsDelivr

<linkrel="stylesheet" href="https://cdn.jsdelivr.net/gh/XHiddenProjects/AnimateJS@1.0.2/animate.min.css"/><linkrel="stylesheet" href="https://cdn.jsdelivr.net/gh/XHiddenProjects/AnimateJS@1.0.2/animate_draw.min.css"/><scriptsrc="https://cdn.jsdelivr.net/gh/XHiddenProjects/AnimateJS@1.0.2/animate.min.js"></script>

Animating

To use the animate your object use the animate() method

constanimate=newAnimateJS(),[container]=animate.Utils.$('.my-cube');/** * Trigger animation on an element based on predefined animation paths * @param {Element} el - DOM element to animate * @param {string} animationPath - dot-separated path to animation in Animations * @param {{timing: 'linear'|'ease'|'ease-in'|'ease-out'|'ease-in-out'|'cubic-bezier(n,n,n,n)', duration: number, delay: number, count: number, direction: 'normal'|'reverse'|'alternate'|'alternate-reverse' , mode: 'none'|'forwards'|'backwards'|'both'}} options - animation options like duration, delay etc. * @returns {Promise} - resolves after animation ends */animate.animate(container,'fade.in').then(()=>{// Send a console message when animation is doneconsole.log('Animation done!');});

You can check out the in-built animations


Running multiple animations (Sequentially)

To execute animation as step process you will have to use the run() method

constanimate=newAnimateJS(),[myElement]=animate.Utils.$('.my-cube');// Run animations sequentiallyanimate.run(()=>animate.animate(myElement,'fade.in',{duration: 1000}),()=>animate.animate(myElement,'rotate.clockwise',{duration: 1000,delay: 500}),()=>animate.animate(myElement,'slide.outRight',{duration: 1000,delay: 500}));

Custom Animations

To create custom animation you will need 2 classes AnimationJS() and KeyFrames()

Here is an example:

constanimate=newAnimateJS(),[container]=animate.Utils.$('.text');constframe=newKeyFrames();// AnimationJS(pathName); The path would be "custom.rainbow"constrainbowTextAnimation=newAnimationJS('custom','rainbow')// createTimeline(percentage|from-to, KeyFrames).createTimeline('0',frame.fontShadow({v:0,h:0,blur:2,color:'red'}).color('red')).createTimeline('20',frame.clear().fontShadow({v:0,h:0,blur:2,color:'orange'}).color('orange')).createTimeline('40',frame.clear().fontShadow({v:0,h:0,blur:2,color:'yellow'}).color('yellow')).createTimeline('60',frame.clear().fontShadow({v:0,h:0,blur:2,color:'green'}).color('green')).createTimeline('80',frame.clear().fontShadow({v:0,h:0,blur:2,color:'blue'}).color('blue')).createTimeline('100',frame.clear().fontShadow({v:0,h:0,blur:2,color:'purple'}).color('purple')).develop();// Add it to AnimateJS instanceanimate.add(rainbowTextAnimation);animate.animate(container,'custom.rainbow',{timing: animate.EASE_IN_OUT,duration: animate.SLOW,mode: animate.FORWARDS,count: animate.INFINITE});

KeyFrames

Keyframes are what is placed inside each timeline

Methods:

MethodsCodeDescription
RotateRotate(degree)Rotate the object by degree
RotateXRotateX(degree)Rotate the object by X-axis
RotateYRotateY(degree)Rotate the object by Y-axis
RotateZRotateZ(degree)Rotate the object by Z-axis
Rotate3DRotate3D(x, y, z, degree)Rotate the object by 3D
skewskew(xDeg, yDeg)Skew the object
skewXskewX(xDeg)Skew the object by x-axis
skewYskewY(yDeg)Skew the object by y-axis
ScaleScale(sx, sy)Scale the object by size
ScaleXScaleX(sx)Scale the object by X-axis
ScaleYScaleY(sy)Scale the object by Y-axis
ScaleZScaleZ(sz)Scale the object by Z-axis
Scale3DScale3D(sx, sy, sz)Scale the object by 3D
perspectiveperspective(distance)Adds perspective transformation.
transitiontransition(...string)transition properties
borderborder(width, style, color, ...locations)Border style
boxShadowboxShadow(...{h:number, v: number, blur: number, spread: number, color: string})Box shadow to object
fontShadowfontShadow(...{h:number, v:number, blur: number, color: string})Text shadow to object
colorcolor(color)Color to object
opacityopacity(value)Opacity to object
backgroundbackground(...backgrounds)Combines background values
matrixmatrix(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)Applies a 4x4 matrix transformation.
matrix3Dmatrix3D(a1, b1, c1, d1, a2, b2, c2, d2, a3, b3, c3, d3, a4, b4, c4, d4)Applies a 3D matrix transformation.
clearclear()clears everything to default

Utilities

Here are some utities that can be used

inView

Sends a boolean whether or not the page is focued on an item

/** * Checks if an element is within the viewport * @param {Element} el - DOM element to check * @returns {boolean} - TRUE if in view, else FALSE */animate.Utils.inView(el);

$

Selects all elements based on the selected query: document.querySelectorAll()

/** * Selects all elements under target selector. * **Reference:** _(document.querySelectorAll)_ * @param {string} el CSS selector * @returns {NodeList} Returns all element descendants of node that match selectors. */animate.Utils.$(el);

$$

Selects first element based on the selected query: document.querySelector()

/** * Selects an element under target selector. * **Reference:** _(document.querySelector)_ * @param {string} el CSS selector * @returns {any} Returns the first element that is a descendant of node that matches selectors. */animate.Utils.$S(el);

Merger

Merges animations from the current animation

/** * Merges a new animation string with existing styles * @param {Element} el - DOM element * @param {string} animation - animation string to merge */animate.Utils.Merger(el,animation);

contrast

Returns the contrast between two colors

/** * Returns the contrast ratio between 2 colors * @param {string} color1 Background color * @param {string} color2 Fore color * @returns {number} Ratio between to colors  */animate.Utils.contrast(color1,color2)

CONSTANTS

Here are some constants that will make things easier for you

Count

ConstantValue
INFINITE-1

Timing

ConstantValue
EASE'ease'
LINEAR'linear'
EASE_IN'ease-in'
EASE_IN_OUT'ease-in-out'
EASE_OUT'ease-out'
CUBIC_BEZIERCUBIC_BEZIER(x1,y1,x2,y2)

Direction

ConstantValue
NORMAL'normal'
REVERSE'reverse'
ALT'alternate'
ALT_REVERSE'alternate-reverse'

Mode

ConstantValue
NONE'none'
FORWARDS'forwards'
BACKWARDS'backwards'
BOTH'both'

Speed

ConstantValue
SUPER_SLOW5000
SLOW3000
MODERATE1000
FAST500
SUPER_FAST200

Colors

ConstantValue
RED'#ff0000'
BROWN'#a52a2a'
TAN'#d2b48c'
ORANGE'#ffa500'
YELLOW'#ffff00'
GOLD'#ffd700'
GREEN'#008000'
LIME'#00ff00'
BLUE'#0000ff'
CYAN'#00ffff'
NAVY'#000080'
PURPLE'#800080'
MAGENTA'#ff00ff'
GRAY'#808080'
LIGHT_GRAY'#d3d3d3'
PINK'#ffc0cb'
BLACK'#000'
WHITE'#FFF'

Transparency

ConstantValue
OPACITY1
OPACITY_HALF0.5
NO_OPACITY0

Built in animations

AnimationPath
FadeInfade.in
FadeOutfade.out
FadeInTopfade.inTop
FadeOutTopfade.outTop
FadeInRightfade.inRight
FadeOutRightfade.outRight
FadeInBottomfade.inBottom
FadeOutBottomfade.outBottom
FadeInLeftfade.inLeft
FadeOutLeftfade.outLeft
SlideInslide.in
SlideOutslide.out
SlideInTopslide.inTop
SlideOutTopslide.outTop
SlideInRightslide.inRight
SlideOutRightslide.outRight
SlideInBottomslide.inBottom
SlideOutBottomslide.outBottom
SlideInLeftslide.inLeft
SlideOutLeftslide.outLeft
rotateInrotate.in
rotateOutrotate.Out
rotateClockwiserotate.clockwise
rotateCounterClockwiserotate.counterClockwise
zoomInzoom.in
zoomOutzoom.out
bouncebounce
stretchWidthstretch.width
stretchHeightstretch.height

About

Easy to use animation written in JS and CSS using 2D and 3D animations.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

AnimateJS

AnimateJS is a user-friendly library that simplifies creating smooth 2D and 3D animations using JavaScript and CSS. Ideal for adding dynamic, engaging effects to your web projects with minimal effort.

Check out the2D demo or 3D demo

Startup

To include the the script use the HTML code here

<!DOCTYPE html><html><head><linkrel="stylesheet" href="/path/to/animate.min.css"/><linkrel="stylesheet" href="/path/to/animate_draw.min.css"/></head><body>
...
<scriptsrc="/path/to/animate.min.js"></script><scriptsrc="index.js"></script></body></html>

OR jsDelivr

<linkrel="stylesheet" href="https://cdn.jsdelivr.net/gh/XHiddenProjects/AnimateJS@1.0.2/animate.min.css"/><linkrel="stylesheet" href="https://cdn.jsdelivr.net/gh/XHiddenProjects/AnimateJS@1.0.2/animate_draw.min.css"/><scriptsrc="https://cdn.jsdelivr.net/gh/XHiddenProjects/AnimateJS@1.0.2/animate.min.js"></script>

Animating

To use the animate your object use the animate() method

constanimate=newAnimateJS(),[container]=animate.Utils.$('.my-cube');/** * Trigger animation on an element based on predefined animation paths * @param {Element} el - DOM element to animate * @param {string} animationPath - dot-separated path to animation in Animations * @param {{timing: 'linear'|'ease'|'ease-in'|'ease-out'|'ease-in-out'|'cubic-bezier(n,n,n,n)', duration: number, delay: number, count: number, direction: 'normal'|'reverse'|'alternate'|'alternate-reverse' , mode: 'none'|'forwards'|'backwards'|'both'}} options - animation options like duration, delay etc. * @returns {Promise} - resolves after animation ends */animate.animate(container,'fade.in').then(()=>{// Send a console message when animation is doneconsole.log('Animation done!');});

You can check out the in-built animations


Running multiple animations (Sequentially)

To execute animation as step process you will have to use the run() method

constanimate=newAnimateJS(),[myElement]=animate.Utils.$('.my-cube');// Run animations sequentiallyanimate.run(()=>animate.animate(myElement,'fade.in',{duration: 1000}),()=>animate.animate(myElement,'rotate.clockwise',{duration: 1000,delay: 500}),()=>animate.animate(myElement,'slide.outRight',{duration: 1000,delay: 500}));

Custom Animations

To create custom animation you will need 2 classes AnimationJS() and KeyFrames()

Here is an example:

constanimate=newAnimateJS(),[container]=animate.Utils.$('.text');constframe=newKeyFrames();// AnimationJS(pathName); The path would be "custom.rainbow"constrainbowTextAnimation=newAnimationJS('custom','rainbow')// createTimeline(percentage|from-to, KeyFrames).createTimeline('0',frame.fontShadow({v:0,h:0,blur:2,color:'red'}).color('red')).createTimeline('20',frame.clear().fontShadow({v:0,h:0,blur:2,color:'orange'}).color('orange')).createTimeline('40',frame.clear().fontShadow({v:0,h:0,blur:2,color:'yellow'}).color('yellow')).createTimeline('60',frame.clear().fontShadow({v:0,h:0,blur:2,color:'green'}).color('green')).createTimeline('80',frame.clear().fontShadow({v:0,h:0,blur:2,color:'blue'}).color('blue')).createTimeline('100',frame.clear().fontShadow({v:0,h:0,blur:2,color:'purple'}).color('purple')).develop();// Add it to AnimateJS instanceanimate.add(rainbowTextAnimation);animate.animate(container,'custom.rainbow',{timing: animate.EASE_IN_OUT,duration: animate.SLOW,mode: animate.FORWARDS,count: animate.INFINITE});

KeyFrames

Keyframes are what is placed inside each timeline

Methods:

MethodsCodeDescription
RotateRotate(degree)Rotate the object by degree
RotateXRotateX(degree)Rotate the object by X-axis
RotateYRotateY(degree)Rotate the object by Y-axis
RotateZRotateZ(degree)Rotate the object by Z-axis
Rotate3DRotate3D(x, y, z, degree)Rotate the object by 3D
skewskew(xDeg, yDeg)Skew the object
skewXskewX(xDeg)Skew the object by x-axis
skewYskewY(yDeg)Skew the object by y-axis
ScaleScale(sx, sy)Scale the object by size
ScaleXScaleX(sx)Scale the object by X-axis
ScaleYScaleY(sy)Scale the object by Y-axis
ScaleZScaleZ(sz)Scale the object by Z-axis
Scale3DScale3D(sx, sy, sz)Scale the object by 3D
perspectiveperspective(distance)Adds perspective transformation.
transitiontransition(...string)transition properties
borderborder(width, style, color, ...locations)Border style
boxShadowboxShadow(...{h:number, v: number, blur: number, spread: number, color: string})Box shadow to object
fontShadowfontShadow(...{h:number, v:number, blur: number, color: string})Text shadow to object
colorcolor(color)Color to object
opacityopacity(value)Opacity to object
backgroundbackground(...backgrounds)Combines background values
matrixmatrix(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)Applies a 4x4 matrix transformation.
matrix3Dmatrix3D(a1, b1, c1, d1, a2, b2, c2, d2, a3, b3, c3, d3, a4, b4, c4, d4)Applies a 3D matrix transformation.
clearclear()clears everything to default

Utilities

Here are some utities that can be used

inView

Sends a boolean whether or not the page is focued on an item

/** * Checks if an element is within the viewport * @param {Element} el - DOM element to check * @returns {boolean} - TRUE if in view, else FALSE */animate.Utils.inView(el);

$

Selects all elements based on the selected query: document.querySelectorAll()

/** * Selects all elements under target selector. * **Reference:** _(document.querySelectorAll)_ * @param {string} el CSS selector * @returns {NodeList} Returns all element descendants of node that match selectors. */animate.Utils.$(el);

$$

Selects first element based on the selected query: document.querySelector()

/** * Selects an element under target selector. * **Reference:** _(document.querySelector)_ * @param {string} el CSS selector * @returns {any} Returns the first element that is a descendant of node that matches selectors. */animate.Utils.$S(el);

Merger

Merges animations from the current animation

/** * Merges a new animation string with existing styles * @param {Element} el - DOM element * @param {string} animation - animation string to merge */animate.Utils.Merger(el,animation);

contrast

Returns the contrast between two colors

/** * Returns the contrast ratio between 2 colors * @param {string} color1 Background color * @param {string} color2 Fore color * @returns {number} Ratio between to colors  */animate.Utils.contrast(color1,color2)

CONSTANTS

Here are some constants that will make things easier for you

Count

ConstantValue
INFINITE-1

Timing

ConstantValue
EASE'ease'
LINEAR'linear'
EASE_IN'ease-in'
EASE_IN_OUT'ease-in-out'
EASE_OUT'ease-out'
CUBIC_BEZIERCUBIC_BEZIER(x1,y1,x2,y2)

Direction

ConstantValue
NORMAL'normal'
REVERSE'reverse'
ALT'alternate'
ALT_REVERSE'alternate-reverse'

Mode

ConstantValue
NONE'none'
FORWARDS'forwards'
BACKWARDS'backwards'
BOTH'both'

Speed

ConstantValue
SUPER_SLOW5000
SLOW3000
MODERATE1000
FAST500
SUPER_FAST200

Colors

ConstantValue
RED'#ff0000'
BROWN'#a52a2a'
TAN'#d2b48c'
ORANGE'#ffa500'
YELLOW'#ffff00'
GOLD'#ffd700'
GREEN'#008000'
LIME'#00ff00'
BLUE'#0000ff'
CYAN'#00ffff'
NAVY'#000080'
PURPLE'#800080'
MAGENTA'#ff00ff'
GRAY'#808080'
LIGHT_GRAY'#d3d3d3'
PINK'#ffc0cb'
BLACK'#000'
WHITE'#FFF'

Transparency

ConstantValue
OPACITY1
OPACITY_HALF0.5
NO_OPACITY0

Built in animations

AnimationPath
FadeInfade.in
FadeOutfade.out
FadeInTopfade.inTop
FadeOutTopfade.outTop
FadeInRightfade.inRight
FadeOutRightfade.outRight
FadeInBottomfade.inBottom
FadeOutBottomfade.outBottom
FadeInLeftfade.inLeft
FadeOutLeftfade.outLeft
SlideInslide.in
SlideOutslide.out
SlideInTopslide.inTop
SlideOutTopslide.outTop
SlideInRightslide.inRight
SlideOutRightslide.outRight
SlideInBottomslide.inBottom
SlideOutBottomslide.outBottom
SlideInLeftslide.inLeft
SlideOutLeftslide.outLeft
rotateInrotate.in
rotateOutrotate.Out
rotateClockwiserotate.clockwise
rotateCounterClockwiserotate.counterClockwise
zoomInzoom.in
zoomOutzoom.out
bouncebounce
stretchWidthstretch.width
stretchHeightstretch.height

About

Easy to use animation written in JS and CSS using 2D and 3D animations.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

AnimateJS

AnimateJS is a user-friendly library that simplifies creating smooth 2D and 3D animations using JavaScript and CSS. Ideal for adding dynamic, engaging effects to your web projects with minimal effort.

Check out the2D demo or 3D demo

Startup

To include the the script use the HTML code here

<!DOCTYPE html><html><head><linkrel="stylesheet" href="/path/to/animate.min.css"/><linkrel="stylesheet" href="/path/to/animate_draw.min.css"/></head><body>
...
<scriptsrc="/path/to/animate.min.js"></script><scriptsrc="index.js"></script></body></html>

OR jsDelivr

<linkrel="stylesheet" href="https://cdn.jsdelivr.net/gh/XHiddenProjects/AnimateJS@1.0.2/animate.min.css"/><linkrel="stylesheet" href="https://cdn.jsdelivr.net/gh/XHiddenProjects/AnimateJS@1.0.2/animate_draw.min.css"/><scriptsrc="https://cdn.jsdelivr.net/gh/XHiddenProjects/AnimateJS@1.0.2/animate.min.js"></script>

Animating

To use the animate your object use the animate() method

constanimate=newAnimateJS(),[container]=animate.Utils.$('.my-cube');/** * Trigger animation on an element based on predefined animation paths * @param {Element} el - DOM element to animate * @param {string} animationPath - dot-separated path to animation in Animations * @param {{timing: 'linear'|'ease'|'ease-in'|'ease-out'|'ease-in-out'|'cubic-bezier(n,n,n,n)', duration: number, delay: number, count: number, direction: 'normal'|'reverse'|'alternate'|'alternate-reverse' , mode: 'none'|'forwards'|'backwards'|'both'}} options - animation options like duration, delay etc. * @returns {Promise} - resolves after animation ends */animate.animate(container,'fade.in').then(()=>{// Send a console message when animation is doneconsole.log('Animation done!');});

You can check out the in-built animations


Running multiple animations (Sequentially)

To execute animation as step process you will have to use the run() method

constanimate=newAnimateJS(),[myElement]=animate.Utils.$('.my-cube');// Run animations sequentiallyanimate.run(()=>animate.animate(myElement,'fade.in',{duration: 1000}),()=>animate.animate(myElement,'rotate.clockwise',{duration: 1000,delay: 500}),()=>animate.animate(myElement,'slide.outRight',{duration: 1000,delay: 500}));

Custom Animations

To create custom animation you will need 2 classes AnimationJS() and KeyFrames()

Here is an example:

constanimate=newAnimateJS(),[container]=animate.Utils.$('.text');constframe=newKeyFrames();// AnimationJS(pathName); The path would be "custom.rainbow"constrainbowTextAnimation=newAnimationJS('custom','rainbow')// createTimeline(percentage|from-to, KeyFrames).createTimeline('0',frame.fontShadow({v:0,h:0,blur:2,color:'red'}).color('red')).createTimeline('20',frame.clear().fontShadow({v:0,h:0,blur:2,color:'orange'}).color('orange')).createTimeline('40',frame.clear().fontShadow({v:0,h:0,blur:2,color:'yellow'}).color('yellow')).createTimeline('60',frame.clear().fontShadow({v:0,h:0,blur:2,color:'green'}).color('green')).createTimeline('80',frame.clear().fontShadow({v:0,h:0,blur:2,color:'blue'}).color('blue')).createTimeline('100',frame.clear().fontShadow({v:0,h:0,blur:2,color:'purple'}).color('purple')).develop();// Add it to AnimateJS instanceanimate.add(rainbowTextAnimation);animate.animate(container,'custom.rainbow',{timing: animate.EASE_IN_OUT,duration: animate.SLOW,mode: animate.FORWARDS,count: animate.INFINITE});

KeyFrames

Keyframes are what is placed inside each timeline

Methods:

MethodsCodeDescription
RotateRotate(degree)Rotate the object by degree
RotateXRotateX(degree)Rotate the object by X-axis
RotateYRotateY(degree)Rotate the object by Y-axis
RotateZRotateZ(degree)Rotate the object by Z-axis
Rotate3DRotate3D(x, y, z, degree)Rotate the object by 3D
skewskew(xDeg, yDeg)Skew the object
skewXskewX(xDeg)Skew the object by x-axis
skewYskewY(yDeg)Skew the object by y-axis
ScaleScale(sx, sy)Scale the object by size
ScaleXScaleX(sx)Scale the object by X-axis
ScaleYScaleY(sy)Scale the object by Y-axis
ScaleZScaleZ(sz)Scale the object by Z-axis
Scale3DScale3D(sx, sy, sz)Scale the object by 3D
perspectiveperspective(distance)Adds perspective transformation.
transitiontransition(...string)transition properties
borderborder(width, style, color, ...locations)Border style
boxShadowboxShadow(...{h:number, v: number, blur: number, spread: number, color: string})Box shadow to object
fontShadowfontShadow(...{h:number, v:number, blur: number, color: string})Text shadow to object
colorcolor(color)Color to object
opacityopacity(value)Opacity to object
backgroundbackground(...backgrounds)Combines background values
matrixmatrix(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)Applies a 4x4 matrix transformation.
matrix3Dmatrix3D(a1, b1, c1, d1, a2, b2, c2, d2, a3, b3, c3, d3, a4, b4, c4, d4)Applies a 3D matrix transformation.
clearclear()clears everything to default

Utilities

Here are some utities that can be used

inView

Sends a boolean whether or not the page is focued on an item

/** * Checks if an element is within the viewport * @param {Element} el - DOM element to check * @returns {boolean} - TRUE if in view, else FALSE */animate.Utils.inView(el);

$

Selects all elements based on the selected query: document.querySelectorAll()

/** * Selects all elements under target selector. * **Reference:** _(document.querySelectorAll)_ * @param {string} el CSS selector * @returns {NodeList} Returns all element descendants of node that match selectors. */animate.Utils.$(el);

$$

Selects first element based on the selected query: document.querySelector()

/** * Selects an element under target selector. * **Reference:** _(document.querySelector)_ * @param {string} el CSS selector * @returns {any} Returns the first element that is a descendant of node that matches selectors. */animate.Utils.$S(el);

Merger

Merges animations from the current animation

/** * Merges a new animation string with existing styles * @param {Element} el - DOM element * @param {string} animation - animation string to merge */animate.Utils.Merger(el,animation);

contrast

Returns the contrast between two colors

/** * Returns the contrast ratio between 2 colors * @param {string} color1 Background color * @param {string} color2 Fore color * @returns {number} Ratio between to colors  */animate.Utils.contrast(color1,color2)

CONSTANTS

Here are some constants that will make things easier for you

Count

ConstantValue
INFINITE-1

Timing

ConstantValue
EASE'ease'
LINEAR'linear'
EASE_IN'ease-in'
EASE_IN_OUT'ease-in-out'
EASE_OUT'ease-out'
CUBIC_BEZIERCUBIC_BEZIER(x1,y1,x2,y2)

Direction

ConstantValue
NORMAL'normal'
REVERSE'reverse'
ALT'alternate'
ALT_REVERSE'alternate-reverse'

Mode

ConstantValue
NONE'none'
FORWARDS'forwards'
BACKWARDS'backwards'
BOTH'both'

Speed

ConstantValue
SUPER_SLOW5000
SLOW3000
MODERATE1000
FAST500
SUPER_FAST200

Colors

ConstantValue
RED'#ff0000'
BROWN'#a52a2a'
TAN'#d2b48c'
ORANGE'#ffa500'
YELLOW'#ffff00'
GOLD'#ffd700'
GREEN'#008000'
LIME'#00ff00'
BLUE'#0000ff'
CYAN'#00ffff'
NAVY'#000080'
PURPLE'#800080'
MAGENTA'#ff00ff'
GRAY'#808080'
LIGHT_GRAY'#d3d3d3'
PINK'#ffc0cb'
BLACK'#000'
WHITE'#FFF'

Transparency

ConstantValue
OPACITY1
OPACITY_HALF0.5
NO_OPACITY0

Built in animations

AnimationPath
FadeInfade.in
FadeOutfade.out
FadeInTopfade.inTop
FadeOutTopfade.outTop
FadeInRightfade.inRight
FadeOutRightfade.outRight
FadeInBottomfade.inBottom
FadeOutBottomfade.outBottom
FadeInLeftfade.inLeft
FadeOutLeftfade.outLeft
SlideInslide.in
SlideOutslide.out
SlideInTopslide.inTop
SlideOutTopslide.outTop
SlideInRightslide.inRight
SlideOutRightslide.outRight
SlideInBottomslide.inBottom
SlideOutBottomslide.outBottom
SlideInLeftslide.inLeft
SlideOutLeftslide.outLeft
rotateInrotate.in
rotateOutrotate.Out
rotateClockwiserotate.clockwise
rotateCounterClockwiserotate.counterClockwise
zoomInzoom.in
zoomOutzoom.out
bouncebounce
stretchWidthstretch.width
stretchHeightstretch.height

About

Easy to use animation written in JS and CSS using 2D and 3D animations.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

AnimateJS

AnimateJS is a user-friendly library that simplifies creating smooth 2D and 3D animations using JavaScript and CSS. Ideal for adding dynamic, engaging effects to your web projects with minimal effort.

Check out the2D demo or 3D demo

Startup

To include the the script use the HTML code here

<!DOCTYPE html><html><head><linkrel="stylesheet" href="/path/to/animate.min.css"/><linkrel="stylesheet" href="/path/to/animate_draw.min.css"/></head><body>
...
<scriptsrc="/path/to/animate.min.js"></script><scriptsrc="index.js"></script></body></html>

OR jsDelivr

<linkrel="stylesheet" href="https://cdn.jsdelivr.net/gh/XHiddenProjects/AnimateJS@1.0.2/animate.min.css"/><linkrel="stylesheet" href="https://cdn.jsdelivr.net/gh/XHiddenProjects/AnimateJS@1.0.2/animate_draw.min.css"/><scriptsrc="https://cdn.jsdelivr.net/gh/XHiddenProjects/AnimateJS@1.0.2/animate.min.js"></script>

Animating

To use the animate your object use the animate() method

constanimate=newAnimateJS(),[container]=animate.Utils.$('.my-cube');/** * Trigger animation on an element based on predefined animation paths * @param {Element} el - DOM element to animate * @param {string} animationPath - dot-separated path to animation in Animations * @param {{timing: 'linear'|'ease'|'ease-in'|'ease-out'|'ease-in-out'|'cubic-bezier(n,n,n,n)', duration: number, delay: number, count: number, direction: 'normal'|'reverse'|'alternate'|'alternate-reverse' , mode: 'none'|'forwards'|'backwards'|'both'}} options - animation options like duration, delay etc. * @returns {Promise} - resolves after animation ends */animate.animate(container,'fade.in').then(()=>{// Send a console message when animation is doneconsole.log('Animation done!');});

You can check out the in-built animations


Running multiple animations (Sequentially)

To execute animation as step process you will have to use the run() method

constanimate=newAnimateJS(),[myElement]=animate.Utils.$('.my-cube');// Run animations sequentiallyanimate.run(()=>animate.animate(myElement,'fade.in',{duration: 1000}),()=>animate.animate(myElement,'rotate.clockwise',{duration: 1000,delay: 500}),()=>animate.animate(myElement,'slide.outRight',{duration: 1000,delay: 500}));

Custom Animations

To create custom animation you will need 2 classes AnimationJS() and KeyFrames()

Here is an example:

constanimate=newAnimateJS(),[container]=animate.Utils.$('.text');constframe=newKeyFrames();// AnimationJS(pathName); The path would be "custom.rainbow"constrainbowTextAnimation=newAnimationJS('custom','rainbow')// createTimeline(percentage|from-to, KeyFrames).createTimeline('0',frame.fontShadow({v:0,h:0,blur:2,color:'red'}).color('red')).createTimeline('20',frame.clear().fontShadow({v:0,h:0,blur:2,color:'orange'}).color('orange')).createTimeline('40',frame.clear().fontShadow({v:0,h:0,blur:2,color:'yellow'}).color('yellow')).createTimeline('60',frame.clear().fontShadow({v:0,h:0,blur:2,color:'green'}).color('green')).createTimeline('80',frame.clear().fontShadow({v:0,h:0,blur:2,color:'blue'}).color('blue')).createTimeline('100',frame.clear().fontShadow({v:0,h:0,blur:2,color:'purple'}).color('purple')).develop();// Add it to AnimateJS instanceanimate.add(rainbowTextAnimation);animate.animate(container,'custom.rainbow',{timing: animate.EASE_IN_OUT,duration: animate.SLOW,mode: animate.FORWARDS,count: animate.INFINITE});

KeyFrames

Keyframes are what is placed inside each timeline

Methods:

MethodsCodeDescription
RotateRotate(degree)Rotate the object by degree
RotateXRotateX(degree)Rotate the object by X-axis
RotateYRotateY(degree)Rotate the object by Y-axis
RotateZRotateZ(degree)Rotate the object by Z-axis
Rotate3DRotate3D(x, y, z, degree)Rotate the object by 3D
skewskew(xDeg, yDeg)Skew the object
skewXskewX(xDeg)Skew the object by x-axis
skewYskewY(yDeg)Skew the object by y-axis
ScaleScale(sx, sy)Scale the object by size
ScaleXScaleX(sx)Scale the object by X-axis
ScaleYScaleY(sy)Scale the object by Y-axis
ScaleZScaleZ(sz)Scale the object by Z-axis
Scale3DScale3D(sx, sy, sz)Scale the object by 3D
perspectiveperspective(distance)Adds perspective transformation.
transitiontransition(...string)transition properties
borderborder(width, style, color, ...locations)Border style
boxShadowboxShadow(...{h:number, v: number, blur: number, spread: number, color: string})Box shadow to object
fontShadowfontShadow(...{h:number, v:number, blur: number, color: string})Text shadow to object
colorcolor(color)Color to object
opacityopacity(value)Opacity to object
backgroundbackground(...backgrounds)Combines background values
matrixmatrix(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)Applies a 4x4 matrix transformation.
matrix3Dmatrix3D(a1, b1, c1, d1, a2, b2, c2, d2, a3, b3, c3, d3, a4, b4, c4, d4)Applies a 3D matrix transformation.
clearclear()clears everything to default

Utilities

Here are some utities that can be used

inView

Sends a boolean whether or not the page is focued on an item

/** * Checks if an element is within the viewport * @param {Element} el - DOM element to check * @returns {boolean} - TRUE if in view, else FALSE */animate.Utils.inView(el);

$

Selects all elements based on the selected query: document.querySelectorAll()

/** * Selects all elements under target selector. * **Reference:** _(document.querySelectorAll)_ * @param {string} el CSS selector * @returns {NodeList} Returns all element descendants of node that match selectors. */animate.Utils.$(el);

$$

Selects first element based on the selected query: document.querySelector()

/** * Selects an element under target selector. * **Reference:** _(document.querySelector)_ * @param {string} el CSS selector * @returns {any} Returns the first element that is a descendant of node that matches selectors. */animate.Utils.$S(el);

Merger

Merges animations from the current animation

/** * Merges a new animation string with existing styles * @param {Element} el - DOM element * @param {string} animation - animation string to merge */animate.Utils.Merger(el,animation);

contrast

Returns the contrast between two colors

/** * Returns the contrast ratio between 2 colors * @param {string} color1 Background color * @param {string} color2 Fore color * @returns {number} Ratio between to colors  */animate.Utils.contrast(color1,color2)

CONSTANTS

Here are some constants that will make things easier for you

Count

ConstantValue
INFINITE-1

Timing

ConstantValue
EASE'ease'
LINEAR'linear'
EASE_IN'ease-in'
EASE_IN_OUT'ease-in-out'
EASE_OUT'ease-out'
CUBIC_BEZIERCUBIC_BEZIER(x1,y1,x2,y2)

Direction

ConstantValue
NORMAL'normal'
REVERSE'reverse'
ALT'alternate'
ALT_REVERSE'alternate-reverse'

Mode

ConstantValue
NONE'none'
FORWARDS'forwards'
BACKWARDS'backwards'
BOTH'both'

Speed

ConstantValue
SUPER_SLOW5000
SLOW3000
MODERATE1000
FAST500
SUPER_FAST200

Colors

ConstantValue
RED'#ff0000'
BROWN'#a52a2a'
TAN'#d2b48c'
ORANGE'#ffa500'
YELLOW'#ffff00'
GOLD'#ffd700'
GREEN'#008000'
LIME'#00ff00'
BLUE'#0000ff'
CYAN'#00ffff'
NAVY'#000080'
PURPLE'#800080'
MAGENTA'#ff00ff'
GRAY'#808080'
LIGHT_GRAY'#d3d3d3'
PINK'#ffc0cb'
BLACK'#000'
WHITE'#FFF'

Transparency

ConstantValue
OPACITY1
OPACITY_HALF0.5
NO_OPACITY0

Built in animations

AnimationPath
FadeInfade.in
FadeOutfade.out
FadeInTopfade.inTop
FadeOutTopfade.outTop
FadeInRightfade.inRight
FadeOutRightfade.outRight
FadeInBottomfade.inBottom
FadeOutBottomfade.outBottom
FadeInLeftfade.inLeft
FadeOutLeftfade.outLeft
SlideInslide.in
SlideOutslide.out
SlideInTopslide.inTop
SlideOutTopslide.outTop
SlideInRightslide.inRight
SlideOutRightslide.outRight
SlideInBottomslide.inBottom
SlideOutBottomslide.outBottom
SlideInLeftslide.inLeft
SlideOutLeftslide.outLeft
rotateInrotate.in
rotateOutrotate.Out
rotateClockwiserotate.clockwise
rotateCounterClockwiserotate.counterClockwise
zoomInzoom.in
zoomOutzoom.out
bouncebounce
stretchWidthstretch.width
stretchHeightstretch.height

About

Easy to use animation written in JS and CSS using 2D and 3D animations.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

AnimateJS

AnimateJS is a user-friendly library that simplifies creating smooth 2D and 3D animations using JavaScript and CSS. Ideal for adding dynamic, engaging effects to your web projects with minimal effort.

Check out the2D demo or 3D demo

Startup

To include the the script use the HTML code here

<!DOCTYPE html><html><head><linkrel="stylesheet" href="/path/to/animate.min.css"/><linkrel="stylesheet" href="/path/to/animate_draw.min.css"/></head><body>
...
<scriptsrc="/path/to/animate.min.js"></script><scriptsrc="index.js"></script></body></html>

OR jsDelivr

<linkrel="stylesheet" href="https://cdn.jsdelivr.net/gh/XHiddenProjects/AnimateJS@1.0.2/animate.min.css"/><linkrel="stylesheet" href="https://cdn.jsdelivr.net/gh/XHiddenProjects/AnimateJS@1.0.2/animate_draw.min.css"/><scriptsrc="https://cdn.jsdelivr.net/gh/XHiddenProjects/AnimateJS@1.0.2/animate.min.js"></script>

Animating

To use the animate your object use the animate() method

constanimate=newAnimateJS(),[container]=animate.Utils.$('.my-cube');/** * Trigger animation on an element based on predefined animation paths * @param {Element} el - DOM element to animate * @param {string} animationPath - dot-separated path to animation in Animations * @param {{timing: 'linear'|'ease'|'ease-in'|'ease-out'|'ease-in-out'|'cubic-bezier(n,n,n,n)', duration: number, delay: number, count: number, direction: 'normal'|'reverse'|'alternate'|'alternate-reverse' , mode: 'none'|'forwards'|'backwards'|'both'}} options - animation options like duration, delay etc. * @returns {Promise} - resolves after animation ends */animate.animate(container,'fade.in').then(()=>{// Send a console message when animation is doneconsole.log('Animation done!');});

You can check out the in-built animations


Running multiple animations (Sequentially)

To execute animation as step process you will have to use the run() method

constanimate=newAnimateJS(),[myElement]=animate.Utils.$('.my-cube');// Run animations sequentiallyanimate.run(()=>animate.animate(myElement,'fade.in',{duration: 1000}),()=>animate.animate(myElement,'rotate.clockwise',{duration: 1000,delay: 500}),()=>animate.animate(myElement,'slide.outRight',{duration: 1000,delay: 500}));

Custom Animations

To create custom animation you will need 2 classes AnimationJS() and KeyFrames()

Here is an example:

constanimate=newAnimateJS(),[container]=animate.Utils.$('.text');constframe=newKeyFrames();// AnimationJS(pathName); The path would be "custom.rainbow"constrainbowTextAnimation=newAnimationJS('custom','rainbow')// createTimeline(percentage|from-to, KeyFrames).createTimeline('0',frame.fontShadow({v:0,h:0,blur:2,color:'red'}).color('red')).createTimeline('20',frame.clear().fontShadow({v:0,h:0,blur:2,color:'orange'}).color('orange')).createTimeline('40',frame.clear().fontShadow({v:0,h:0,blur:2,color:'yellow'}).color('yellow')).createTimeline('60',frame.clear().fontShadow({v:0,h:0,blur:2,color:'green'}).color('green')).createTimeline('80',frame.clear().fontShadow({v:0,h:0,blur:2,color:'blue'}).color('blue')).createTimeline('100',frame.clear().fontShadow({v:0,h:0,blur:2,color:'purple'}).color('purple')).develop();// Add it to AnimateJS instanceanimate.add(rainbowTextAnimation);animate.animate(container,'custom.rainbow',{timing: animate.EASE_IN_OUT,duration: animate.SLOW,mode: animate.FORWARDS,count: animate.INFINITE});

KeyFrames

Keyframes are what is placed inside each timeline

Methods:

MethodsCodeDescription
RotateRotate(degree)Rotate the object by degree
RotateXRotateX(degree)Rotate the object by X-axis
RotateYRotateY(degree)Rotate the object by Y-axis
RotateZRotateZ(degree)Rotate the object by Z-axis
Rotate3DRotate3D(x, y, z, degree)Rotate the object by 3D
skewskew(xDeg, yDeg)Skew the object
skewXskewX(xDeg)Skew the object by x-axis
skewYskewY(yDeg)Skew the object by y-axis
ScaleScale(sx, sy)Scale the object by size
ScaleXScaleX(sx)Scale the object by X-axis
ScaleYScaleY(sy)Scale the object by Y-axis
ScaleZScaleZ(sz)Scale the object by Z-axis
Scale3DScale3D(sx, sy, sz)Scale the object by 3D
perspectiveperspective(distance)Adds perspective transformation.
transitiontransition(...string)transition properties
borderborder(width, style, color, ...locations)Border style
boxShadowboxShadow(...{h:number, v: number, blur: number, spread: number, color: string})Box shadow to object
fontShadowfontShadow(...{h:number, v:number, blur: number, color: string})Text shadow to object
colorcolor(color)Color to object
opacityopacity(value)Opacity to object
backgroundbackground(...backgrounds)Combines background values
matrixmatrix(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)Applies a 4x4 matrix transformation.
matrix3Dmatrix3D(a1, b1, c1, d1, a2, b2, c2, d2, a3, b3, c3, d3, a4, b4, c4, d4)Applies a 3D matrix transformation.
clearclear()clears everything to default

Utilities

Here are some utities that can be used

inView

Sends a boolean whether or not the page is focued on an item

/** * Checks if an element is within the viewport * @param {Element} el - DOM element to check * @returns {boolean} - TRUE if in view, else FALSE */animate.Utils.inView(el);

$

Selects all elements based on the selected query: document.querySelectorAll()

/** * Selects all elements under target selector. * **Reference:** _(document.querySelectorAll)_ * @param {string} el CSS selector * @returns {NodeList} Returns all element descendants of node that match selectors. */animate.Utils.$(el);

$$

Selects first element based on the selected query: document.querySelector()

/** * Selects an element under target selector. * **Reference:** _(document.querySelector)_ * @param {string} el CSS selector * @returns {any} Returns the first element that is a descendant of node that matches selectors. */animate.Utils.$S(el);

Merger

Merges animations from the current animation

/** * Merges a new animation string with existing styles * @param {Element} el - DOM element * @param {string} animation - animation string to merge */animate.Utils.Merger(el,animation);

contrast

Returns the contrast between two colors

/** * Returns the contrast ratio between 2 colors * @param {string} color1 Background color * @param {string} color2 Fore color * @returns {number} Ratio between to colors  */animate.Utils.contrast(color1,color2)

CONSTANTS

Here are some constants that will make things easier for you

Count

ConstantValue
INFINITE-1

Timing

ConstantValue
EASE'ease'
LINEAR'linear'
EASE_IN'ease-in'
EASE_IN_OUT'ease-in-out'
EASE_OUT'ease-out'
CUBIC_BEZIERCUBIC_BEZIER(x1,y1,x2,y2)

Direction

ConstantValue
NORMAL'normal'
REVERSE'reverse'
ALT'alternate'
ALT_REVERSE'alternate-reverse'

Mode

ConstantValue
NONE'none'
FORWARDS'forwards'
BACKWARDS'backwards'
BOTH'both'

Speed

ConstantValue
SUPER_SLOW5000
SLOW3000
MODERATE1000
FAST500
SUPER_FAST200

Colors

ConstantValue
RED'#ff0000'
BROWN'#a52a2a'
TAN'#d2b48c'
ORANGE'#ffa500'
YELLOW'#ffff00'
GOLD'#ffd700'
GREEN'#008000'
LIME'#00ff00'
BLUE'#0000ff'
CYAN'#00ffff'
NAVY'#000080'
PURPLE'#800080'
MAGENTA'#ff00ff'
GRAY'#808080'
LIGHT_GRAY'#d3d3d3'
PINK'#ffc0cb'
BLACK'#000'
WHITE'#FFF'

Transparency

ConstantValue
OPACITY1
OPACITY_HALF0.5
NO_OPACITY0

Built in animations

AnimationPath
FadeInfade.in
FadeOutfade.out
FadeInTopfade.inTop
FadeOutTopfade.outTop
FadeInRightfade.inRight
FadeOutRightfade.outRight
FadeInBottomfade.inBottom
FadeOutBottomfade.outBottom
FadeInLeftfade.inLeft
FadeOutLeftfade.outLeft
SlideInslide.in
SlideOutslide.out
SlideInTopslide.inTop
SlideOutTopslide.outTop
SlideInRightslide.inRight
SlideOutRightslide.outRight
SlideInBottomslide.inBottom
SlideOutBottomslide.outBottom
SlideInLeftslide.inLeft
SlideOutLeftslide.outLeft
rotateInrotate.in
rotateOutrotate.Out
rotateClockwiserotate.clockwise
rotateCounterClockwiserotate.counterClockwise
zoomInzoom.in
zoomOutzoom.out
bouncebounce
stretchWidthstretch.width
stretchHeightstretch.height

About

Easy to use animation written in JS and CSS using 2D and 3D animations.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

AnimateJS

AnimateJS is a user-friendly library that simplifies creating smooth 2D and 3D animations using JavaScript and CSS. Ideal for adding dynamic, engaging effects to your web projects with minimal effort.

Check out the2D demo or 3D demo

Startup

To include the the script use the HTML code here

<!DOCTYPE html><html><head><linkrel="stylesheet" href="/path/to/animate.min.css"/><linkrel="stylesheet" href="/path/to/animate_draw.min.css"/></head><body>
...
<scriptsrc="/path/to/animate.min.js"></script><scriptsrc="index.js"></script></body></html>

OR jsDelivr

<linkrel="stylesheet" href="https://cdn.jsdelivr.net/gh/XHiddenProjects/AnimateJS@1.0.2/animate.min.css"/><linkrel="stylesheet" href="https://cdn.jsdelivr.net/gh/XHiddenProjects/AnimateJS@1.0.2/animate_draw.min.css"/><scriptsrc="https://cdn.jsdelivr.net/gh/XHiddenProjects/AnimateJS@1.0.2/animate.min.js"></script>

Animating

To use the animate your object use the animate() method

constanimate=newAnimateJS(),[container]=animate.Utils.$('.my-cube');/** * Trigger animation on an element based on predefined animation paths * @param {Element} el - DOM element to animate * @param {string} animationPath - dot-separated path to animation in Animations * @param {{timing: 'linear'|'ease'|'ease-in'|'ease-out'|'ease-in-out'|'cubic-bezier(n,n,n,n)', duration: number, delay: number, count: number, direction: 'normal'|'reverse'|'alternate'|'alternate-reverse' , mode: 'none'|'forwards'|'backwards'|'both'}} options - animation options like duration, delay etc. * @returns {Promise} - resolves after animation ends */animate.animate(container,'fade.in').then(()=>{// Send a console message when animation is doneconsole.log('Animation done!');});

You can check out the in-built animations


Running multiple animations (Sequentially)

To execute animation as step process you will have to use the run() method

constanimate=newAnimateJS(),[myElement]=animate.Utils.$('.my-cube');// Run animations sequentiallyanimate.run(()=>animate.animate(myElement,'fade.in',{duration: 1000}),()=>animate.animate(myElement,'rotate.clockwise',{duration: 1000,delay: 500}),()=>animate.animate(myElement,'slide.outRight',{duration: 1000,delay: 500}));

Custom Animations

To create custom animation you will need 2 classes AnimationJS() and KeyFrames()

Here is an example:

constanimate=newAnimateJS(),[container]=animate.Utils.$('.text');constframe=newKeyFrames();// AnimationJS(pathName); The path would be "custom.rainbow"constrainbowTextAnimation=newAnimationJS('custom','rainbow')// createTimeline(percentage|from-to, KeyFrames).createTimeline('0',frame.fontShadow({v:0,h:0,blur:2,color:'red'}).color('red')).createTimeline('20',frame.clear().fontShadow({v:0,h:0,blur:2,color:'orange'}).color('orange')).createTimeline('40',frame.clear().fontShadow({v:0,h:0,blur:2,color:'yellow'}).color('yellow')).createTimeline('60',frame.clear().fontShadow({v:0,h:0,blur:2,color:'green'}).color('green')).createTimeline('80',frame.clear().fontShadow({v:0,h:0,blur:2,color:'blue'}).color('blue')).createTimeline('100',frame.clear().fontShadow({v:0,h:0,blur:2,color:'purple'}).color('purple')).develop();// Add it to AnimateJS instanceanimate.add(rainbowTextAnimation);animate.animate(container,'custom.rainbow',{timing: animate.EASE_IN_OUT,duration: animate.SLOW,mode: animate.FORWARDS,count: animate.INFINITE});

KeyFrames

Keyframes are what is placed inside each timeline

Methods:

MethodsCodeDescription
RotateRotate(degree)Rotate the object by degree
RotateXRotateX(degree)Rotate the object by X-axis
RotateYRotateY(degree)Rotate the object by Y-axis
RotateZRotateZ(degree)Rotate the object by Z-axis
Rotate3DRotate3D(x, y, z, degree)Rotate the object by 3D
skewskew(xDeg, yDeg)Skew the object
skewXskewX(xDeg)Skew the object by x-axis
skewYskewY(yDeg)Skew the object by y-axis
ScaleScale(sx, sy)Scale the object by size
ScaleXScaleX(sx)Scale the object by X-axis
ScaleYScaleY(sy)Scale the object by Y-axis
ScaleZScaleZ(sz)Scale the object by Z-axis
Scale3DScale3D(sx, sy, sz)Scale the object by 3D
perspectiveperspective(distance)Adds perspective transformation.
transitiontransition(...string)transition properties
borderborder(width, style, color, ...locations)Border style
boxShadowboxShadow(...{h:number, v: number, blur: number, spread: number, color: string})Box shadow to object
fontShadowfontShadow(...{h:number, v:number, blur: number, color: string})Text shadow to object
colorcolor(color)Color to object
opacityopacity(value)Opacity to object
backgroundbackground(...backgrounds)Combines background values
matrixmatrix(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)Applies a 4x4 matrix transformation.
matrix3Dmatrix3D(a1, b1, c1, d1, a2, b2, c2, d2, a3, b3, c3, d3, a4, b4, c4, d4)Applies a 3D matrix transformation.
clearclear()clears everything to default

Utilities

Here are some utities that can be used

inView

Sends a boolean whether or not the page is focued on an item

/** * Checks if an element is within the viewport * @param {Element} el - DOM element to check * @returns {boolean} - TRUE if in view, else FALSE */animate.Utils.inView(el);

$

Selects all elements based on the selected query: document.querySelectorAll()

/** * Selects all elements under target selector. * **Reference:** _(document.querySelectorAll)_ * @param {string} el CSS selector * @returns {NodeList} Returns all element descendants of node that match selectors. */animate.Utils.$(el);

$$

Selects first element based on the selected query: document.querySelector()

/** * Selects an element under target selector. * **Reference:** _(document.querySelector)_ * @param {string} el CSS selector * @returns {any} Returns the first element that is a descendant of node that matches selectors. */animate.Utils.$S(el);

Merger

Merges animations from the current animation

/** * Merges a new animation string with existing styles * @param {Element} el - DOM element * @param {string} animation - animation string to merge */animate.Utils.Merger(el,animation);

contrast

Returns the contrast between two colors

/** * Returns the contrast ratio between 2 colors * @param {string} color1 Background color * @param {string} color2 Fore color * @returns {number} Ratio between to colors  */animate.Utils.contrast(color1,color2)

CONSTANTS

Here are some constants that will make things easier for you

Count

ConstantValue
INFINITE-1

Timing

ConstantValue
EASE'ease'
LINEAR'linear'
EASE_IN'ease-in'
EASE_IN_OUT'ease-in-out'
EASE_OUT'ease-out'
CUBIC_BEZIERCUBIC_BEZIER(x1,y1,x2,y2)

Direction

ConstantValue
NORMAL'normal'
REVERSE'reverse'
ALT'alternate'
ALT_REVERSE'alternate-reverse'

Mode

ConstantValue
NONE'none'
FORWARDS'forwards'
BACKWARDS'backwards'
BOTH'both'

Speed

ConstantValue
SUPER_SLOW5000
SLOW3000
MODERATE1000
FAST500
SUPER_FAST200

Colors

ConstantValue
RED'#ff0000'
BROWN'#a52a2a'
TAN'#d2b48c'
ORANGE'#ffa500'
YELLOW'#ffff00'
GOLD'#ffd700'
GREEN'#008000'
LIME'#00ff00'
BLUE'#0000ff'
CYAN'#00ffff'
NAVY'#000080'
PURPLE'#800080'
MAGENTA'#ff00ff'
GRAY'#808080'
LIGHT_GRAY'#d3d3d3'
PINK'#ffc0cb'
BLACK'#000'
WHITE'#FFF'

Transparency

ConstantValue
OPACITY1
OPACITY_HALF0.5
NO_OPACITY0

Built in animations

AnimationPath
FadeInfade.in
FadeOutfade.out
FadeInTopfade.inTop
FadeOutTopfade.outTop
FadeInRightfade.inRight
FadeOutRightfade.outRight
FadeInBottomfade.inBottom
FadeOutBottomfade.outBottom
FadeInLeftfade.inLeft
FadeOutLeftfade.outLeft
SlideInslide.in
SlideOutslide.out
SlideInTopslide.inTop
SlideOutTopslide.outTop
SlideInRightslide.inRight
SlideOutRightslide.outRight
SlideInBottomslide.inBottom
SlideOutBottomslide.outBottom
SlideInLeftslide.inLeft
SlideOutLeftslide.outLeft
rotateInrotate.in
rotateOutrotate.Out
rotateClockwiserotate.clockwise
rotateCounterClockwiserotate.counterClockwise
zoomInzoom.in
zoomOutzoom.out
bouncebounce
stretchWidthstretch.width
stretchHeightstretch.height

About

Easy to use animation written in JS and CSS using 2D and 3D animations.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

AnimateJS

AnimateJS is a user-friendly library that simplifies creating smooth 2D and 3D animations using JavaScript and CSS. Ideal for adding dynamic, engaging effects to your web projects with minimal effort.

Check out the2D demo or 3D demo

Startup

To include the the script use the HTML code here

<!DOCTYPE html><html><head><linkrel="stylesheet" href="/path/to/animate.min.css"/><linkrel="stylesheet" href="/path/to/animate_draw.min.css"/></head><body>
...
<scriptsrc="/path/to/animate.min.js"></script><scriptsrc="index.js"></script></body></html>

OR jsDelivr

<linkrel="stylesheet" href="https://cdn.jsdelivr.net/gh/XHiddenProjects/AnimateJS@1.0.2/animate.min.css"/><linkrel="stylesheet" href="https://cdn.jsdelivr.net/gh/XHiddenProjects/AnimateJS@1.0.2/animate_draw.min.css"/><scriptsrc="https://cdn.jsdelivr.net/gh/XHiddenProjects/AnimateJS@1.0.2/animate.min.js"></script>

Animating

To use the animate your object use the animate() method

constanimate=newAnimateJS(),[container]=animate.Utils.$('.my-cube');/** * Trigger animation on an element based on predefined animation paths * @param {Element} el - DOM element to animate * @param {string} animationPath - dot-separated path to animation in Animations * @param {{timing: 'linear'|'ease'|'ease-in'|'ease-out'|'ease-in-out'|'cubic-bezier(n,n,n,n)', duration: number, delay: number, count: number, direction: 'normal'|'reverse'|'alternate'|'alternate-reverse' , mode: 'none'|'forwards'|'backwards'|'both'}} options - animation options like duration, delay etc. * @returns {Promise} - resolves after animation ends */animate.animate(container,'fade.in').then(()=>{// Send a console message when animation is doneconsole.log('Animation done!');});

You can check out the in-built animations


Running multiple animations (Sequentially)

To execute animation as step process you will have to use the run() method

constanimate=newAnimateJS(),[myElement]=animate.Utils.$('.my-cube');// Run animations sequentiallyanimate.run(()=>animate.animate(myElement,'fade.in',{duration: 1000}),()=>animate.animate(myElement,'rotate.clockwise',{duration: 1000,delay: 500}),()=>animate.animate(myElement,'slide.outRight',{duration: 1000,delay: 500}));

Custom Animations

To create custom animation you will need 2 classes AnimationJS() and KeyFrames()

Here is an example:

constanimate=newAnimateJS(),[container]=animate.Utils.$('.text');constframe=newKeyFrames();// AnimationJS(pathName); The path would be "custom.rainbow"constrainbowTextAnimation=newAnimationJS('custom','rainbow')// createTimeline(percentage|from-to, KeyFrames).createTimeline('0',frame.fontShadow({v:0,h:0,blur:2,color:'red'}).color('red')).createTimeline('20',frame.clear().fontShadow({v:0,h:0,blur:2,color:'orange'}).color('orange')).createTimeline('40',frame.clear().fontShadow({v:0,h:0,blur:2,color:'yellow'}).color('yellow')).createTimeline('60',frame.clear().fontShadow({v:0,h:0,blur:2,color:'green'}).color('green')).createTimeline('80',frame.clear().fontShadow({v:0,h:0,blur:2,color:'blue'}).color('blue')).createTimeline('100',frame.clear().fontShadow({v:0,h:0,blur:2,color:'purple'}).color('purple')).develop();// Add it to AnimateJS instanceanimate.add(rainbowTextAnimation);animate.animate(container,'custom.rainbow',{timing: animate.EASE_IN_OUT,duration: animate.SLOW,mode: animate.FORWARDS,count: animate.INFINITE});

KeyFrames

Keyframes are what is placed inside each timeline

Methods:

MethodsCodeDescription
RotateRotate(degree)Rotate the object by degree
RotateXRotateX(degree)Rotate the object by X-axis
RotateYRotateY(degree)Rotate the object by Y-axis
RotateZRotateZ(degree)Rotate the object by Z-axis
Rotate3DRotate3D(x, y, z, degree)Rotate the object by 3D
skewskew(xDeg, yDeg)Skew the object
skewXskewX(xDeg)Skew the object by x-axis
skewYskewY(yDeg)Skew the object by y-axis
ScaleScale(sx, sy)Scale the object by size
ScaleXScaleX(sx)Scale the object by X-axis
ScaleYScaleY(sy)Scale the object by Y-axis
ScaleZScaleZ(sz)Scale the object by Z-axis
Scale3DScale3D(sx, sy, sz)Scale the object by 3D
perspectiveperspective(distance)Adds perspective transformation.
transitiontransition(...string)transition properties
borderborder(width, style, color, ...locations)Border style
boxShadowboxShadow(...{h:number, v: number, blur: number, spread: number, color: string})Box shadow to object
fontShadowfontShadow(...{h:number, v:number, blur: number, color: string})Text shadow to object
colorcolor(color)Color to object
opacityopacity(value)Opacity to object
backgroundbackground(...backgrounds)Combines background values
matrixmatrix(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)Applies a 4x4 matrix transformation.
matrix3Dmatrix3D(a1, b1, c1, d1, a2, b2, c2, d2, a3, b3, c3, d3, a4, b4, c4, d4)Applies a 3D matrix transformation.
clearclear()clears everything to default

Utilities

Here are some utities that can be used

inView

Sends a boolean whether or not the page is focued on an item

/** * Checks if an element is within the viewport * @param {Element} el - DOM element to check * @returns {boolean} - TRUE if in view, else FALSE */animate.Utils.inView(el);

$

Selects all elements based on the selected query: document.querySelectorAll()

/** * Selects all elements under target selector. * **Reference:** _(document.querySelectorAll)_ * @param {string} el CSS selector * @returns {NodeList} Returns all element descendants of node that match selectors. */animate.Utils.$(el);

$$

Selects first element based on the selected query: document.querySelector()

/** * Selects an element under target selector. * **Reference:** _(document.querySelector)_ * @param {string} el CSS selector * @returns {any} Returns the first element that is a descendant of node that matches selectors. */animate.Utils.$S(el);

Merger

Merges animations from the current animation

/** * Merges a new animation string with existing styles * @param {Element} el - DOM element * @param {string} animation - animation string to merge */animate.Utils.Merger(el,animation);

contrast

Returns the contrast between two colors

/** * Returns the contrast ratio between 2 colors * @param {string} color1 Background color * @param {string} color2 Fore color * @returns {number} Ratio between to colors  */animate.Utils.contrast(color1,color2)

CONSTANTS

Here are some constants that will make things easier for you

Count

ConstantValue
INFINITE-1

Timing

ConstantValue
EASE'ease'
LINEAR'linear'
EASE_IN'ease-in'
EASE_IN_OUT'ease-in-out'
EASE_OUT'ease-out'
CUBIC_BEZIERCUBIC_BEZIER(x1,y1,x2,y2)

Direction

ConstantValue
NORMAL'normal'
REVERSE'reverse'
ALT'alternate'
ALT_REVERSE'alternate-reverse'

Mode

ConstantValue
NONE'none'
FORWARDS'forwards'
BACKWARDS'backwards'
BOTH'both'

Speed

ConstantValue
SUPER_SLOW5000
SLOW3000
MODERATE1000
FAST500
SUPER_FAST200

Colors

ConstantValue
RED'#ff0000'
BROWN'#a52a2a'
TAN'#d2b48c'
ORANGE'#ffa500'
YELLOW'#ffff00'
GOLD'#ffd700'
GREEN'#008000'
LIME'#00ff00'
BLUE'#0000ff'
CYAN'#00ffff'
NAVY'#000080'
PURPLE'#800080'
MAGENTA'#ff00ff'
GRAY'#808080'
LIGHT_GRAY'#d3d3d3'
PINK'#ffc0cb'
BLACK'#000'
WHITE'#FFF'

Transparency

ConstantValue
OPACITY1
OPACITY_HALF0.5
NO_OPACITY0

Built in animations

AnimationPath
FadeInfade.in
FadeOutfade.out
FadeInTopfade.inTop
FadeOutTopfade.outTop
FadeInRightfade.inRight
FadeOutRightfade.outRight
FadeInBottomfade.inBottom
FadeOutBottomfade.outBottom
FadeInLeftfade.inLeft
FadeOutLeftfade.outLeft
SlideInslide.in
SlideOutslide.out
SlideInTopslide.inTop
SlideOutTopslide.outTop
SlideInRightslide.inRight
SlideOutRightslide.outRight
SlideInBottomslide.inBottom
SlideOutBottomslide.outBottom
SlideInLeftslide.inLeft
SlideOutLeftslide.outLeft
rotateInrotate.in
rotateOutrotate.Out
rotateClockwiserotate.clockwise
rotateCounterClockwiserotate.counterClockwise
zoomInzoom.in
zoomOutzoom.out
bouncebounce
stretchWidthstretch.width
stretchHeightstretch.height

About

Easy to use animation written in JS and CSS using 2D and 3D animations.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages