UNPKG

animbase

Version:
197 lines (139 loc) โ€ข 6.37 kB
# AnimBase [![npm](https://img.shields.io/npm/v/animbase)](https://www.npmjs.com/package/animbase) [![install size](https://packagephobia.com/badge?p=animbase)](https://packagephobia.com/result?p=animbase) [![bundlephobia](https://img.shields.io/bundlephobia/minzip/animbase)](https://bundlephobia.com/package/animbase) [![license](https://img.shields.io/badge/license-MIT-green)](https://github.com/agusmade/animbase/blob/main/LICENSE) [![gh-pages](https://img.shields.io/badge/demo-gh--pages-orange)](https://agusmade.github.io/animbase/) **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 (3 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 ```bash npm install animbase ``` Then import manually: ```js import AnimBase from 'animbase'; ``` ### Using CDN ```html <script src="https://cdn.jsdelivr.net/npm/animbase@1.1.2/dist/animbase.iife.min.js"></script> ``` --- ## ๐Ÿงญ Quick Start ### 1. Include the script ```html <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`. ```html <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. Triggered Timed Animator ```html <!-- 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> ``` --- ## ๐Ÿ“š Documentation API reference and usage guide: ๐Ÿ‘‰ [https://agusmade.github.io/animbase/docs](https://agusmade.github.io/animbase/docs) --- ## ๐ŸŽจ Demo Gallery Explore live demos of AnimBase in action: ๐Ÿ‘‰ [https://agusmade.github.io/animbase/demo](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 It Works - `data-anim-init` defines the initial style (e.g. `{ "opacity": "0", "transform": "scale(0.5)" }`) - `data-anim-config` defines how it animates over time using keyframes with optional easing per subvalue - Subvalue formats supported: - `1`, `1px`, `1%`, `1deg`, `#00f` โ†’ default to **linear easing** - `1.out`, `1px.in`, `#00f.inOut` โ†’ apply **explicit easing function** - Includes 30+ easing types: `linear`, `inOutBack`, `outElastic`, `inBounce`, `spring`, and more. - Each CSS property string is parsed to detect subvalues (numbers, units, colors), all of which are animated individually. - Example: `boxShadow: "0 0 10px #000"` โ†’ 4 animatable parts. - Works with **any property** containing animatable values. --- ## ๐Ÿงช Advanced API (for `trigger-group` only) ```js 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](https://agusmade.github.io/animbase/) to see AnimBase in action, or integrate it into your next web creation! ๐Ÿ”— GitHub: [github.com/agusmade/animbase](https://github.com/agusmade/animbase) ๐Ÿ“ฆ NPM: [npmjs.com/package/animbase](https://www.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