Skip to content

agusmade/animbase

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

10 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

AnimBase

npm install size bundlephobia license gh-pages

The declarative animation engine โ€“ Animate HTML elements using only data-* attributes. No custom JavaScript required.

โœจ Features

  • ๐Ÿ”ง Fully declarative via data-anim-init and data-anim-config
  • ๐ŸŽฎ Frame-based timeline
  • ๐ŸŽจ Supports numeric values and colors
  • โšก Per-subvalue easing (e.g., transform: translateY(20px.out), color: #00f.out)
  • ๐Ÿง  Detects and interpolates each number or color in a single property (e.g., box-shadow, filter, transform, outline, etc.)
  • ๐ŸŽฏ Multiple timeline sources (2 types):
    • external-controlled (scroll, input range, other)
    • triggered timer (looping or one-shot)
  • ๐Ÿ”‚ Triggered animation with runtime control API
  • โฐ Playback control: trigger, pause, resume, stop, seek
  • ๐Ÿ” Direction control with reverse
  • โ˜๏ธ Play-once support with once
  • ๐Ÿช Hooks: onStart and onFinish
  • ๐Ÿงฉ Easy to extend and integrate

๐Ÿš€ Installation

Using NPM

npm install animbase

Then import manually:

import AnimBase from 'animbase';

Using CDN

<script src="https://cdn.jsdelivr.net/npm/animbase@1.1.2/dist/animbase.iife.min.js"></script>

๐Ÿงญ Quick Start

1. Include the script

<script src="https://cdn.jsdelivr.net/npm/animbase@1.1.2/dist/animbase.iife.min.js"></script>

2. Add animated element using one of two animation modes:

A. External-Controlled Animator

These use data-anim-controller-ref and/or data-anim-controlled-by.

<input type="range" id="range" min="0" max="100" />
<div
	data-anim-controller-ref="#range"
	data-anim-controlled-by="value"
	data-anim-init='{"opacity": "0"}'
	data-anim-config='{"100": {"opacity": "1"}}'
></div>

<!-- Or using scrollY on window -->
<div
	data-anim-controlled-by="scrollY"
	data-anim-init='{"transform": "translateY(100px.out)"}'
	data-anim-config='{"200": {"transform": "translateY(0px.out)"}}'
></div>
  • data-anim-controller-ref: selector of the controlling element (default: window)
  • data-anim-controlled-by: property to read (e.g. value, scrollTop, scrollLeft)
  • data-anim-listen (optional): event to listen (e.g. input, scroll, timeupdate, etc.)

Default behavior:

  • If only data-anim-controller-ref โ†’ property defaults to value, listens to input
  • If only data-anim-controlled-by โ†’ target defaults to window, uses common scroll events

B. Timed Animator

<!-- Config element (required once per group) -->
<div
	data-anim-trigger-group="hero"
	data-anim-trigger-config='{"speed": 60, "once": false, "reverse": false, "autostart": true}'
></div>

<!-- Animated element(s) -->
<div data-anim-init='{"opacity": "0"}' data-anim-config='{"100": {"opacity": "1"}}' data-anim-trigger-group="hero"></div>

<!-- Optional JS control -->
<script>
	AnimBase.trigger('hero');
</script>

Group config should be placed on a separate, non-animated element.


๐Ÿ“š Documentation

API reference and usage guide:
๐Ÿ‘‰ https://agusmade.github.io/animbase/docs


๐ŸŽจ Demo Gallery

Explore live demos of AnimBase in action:
๐Ÿ‘‰ https://agusmade.github.io/animbase/demo

Includes coverflow, book flips, 3D cards, scroll animations, and more.

--

๐Ÿ“ Builds

AnimBase includes multiple builds:

File Type Notes
animbase.esm.js ESM For modern bundlers
animbase.cjs.js CommonJS For Node or legacy tools
animbase.iife.js IIFE Non-minified global build
animbase.iife.min.js IIFE (min) Production CDN use
animbase-core-only.*.js Core only Excludes auto-init logic

โš ๏ธ Source maps are not included in the npm package to keep it lightweight.


๐Ÿง  How AnimBase Works (Summary)

AnimBase lets you define powerful animations entirely using HTML attributes โ€” no JavaScript required for most cases.

It works by parsing two key attributes:

1. data-anim-init

Defines the initial styles of the element as a JSON string.

data-anim-init='{"opacity": "0", "transform": "scale(0.5)"}'

2. data-anim-config

Defines a timeline of keyframes, where each key (frame number) maps to a style change. Values are interpolated over time.

data-anim-config='{ "500": {"opacity": "1.out", "transform": "scale(1.spring)"} }'

โœจ Per-Value Easing

Each variable inside a value string (e.g. 5rem.outQuad) can have its own easing. AnimBase parses:

  • Numbers: 100, 50px, -2.5rem, 10%
  • Colors: #fff, #5bf.outBounce
  • Easing functions: linear, spring, outQuad, etc.

โš™๏ธ Example

<div
	data-anim-init='{"boxShadow": "1px -2.5rem 10% #5bf"}'
	data-anim-config='{"300": {"boxShadow": "3px 5rem.in 10% #fa2.outBounce"}}'
>
	AnimBase
</div>

Each variable animates independently with its own easing. AnimBase matches variables by position, so value structure must stay consistent across keyframes.

๐Ÿ‘‰ Want more details? See the full explanation here


๐Ÿ’ช Advanced API (for trigger-group only)

AnimBase.trigger('group'); // Start animation
AnimBase.pause('group'); // Pause
AnimBase.resume('group'); // Resume
AnimBase.stop('group'); // Stop and reset
AnimBase.seek('group', 50); // Jump to frame 50
AnimBase.setReverse('group', true); // Reverse playback
AnimBase.setOnce('group', true); // Play once only

AnimBase.setHooks('group', {
	onStart: () => console.log('Started'),
	onFinish: () => console.log('Finished'),
});

// Add element programmatically
AnimBase.getAnimator('group').addElement(domElement, {init, config});

๐Ÿ“† License

MIT


๐ŸŽ‰ Check out the live demos to see AnimBase in action, or integrate it into your next web creation!

๐Ÿ”— GitHub: github.com/agusmade/animbase
๐Ÿ“ฆ NPM: npmjs.com/package/animbase


๐Ÿ‘‹ AnimBase is open-source and ready to grow with your creativity.
Contribute, suggest features, or just say hi!

Made with โค๏ธ by Agus Made