UNPKG

@slidy/animation

Version:

Simple animation functions for inertion scrolling

161 lines (119 loc) 5.04 kB
[![npm version](https://img.shields.io/npm/v/@slidy/animation)](https://www.npmjs.com/package/@slidy/animation) [![npm bundle size](https://img.shields.io/bundlephobia/minzip/@slidy/animation?label=minzip)](https://bundlephobia.com/package/@slidy/animation) [![npm downloads](https://img.shields.io/npm/dt/@slidy/animation)](https://www.npmjs.com/package/@slidy/animation) [![github issues](https://img.shields.io/github/issues/valexr/slidy)](https://github.com/Valexr/slidy/issues) [![npm license](https://img.shields.io/npm/l/@slidy/animation)](https://www.npmjs.com/package/@slidy/animation) # @slidy/animation Simple animation functions for inertion scrolling. #### Try the [DEMO] > - [Getting started](#getting-started-) > - [Usage](#usage) > - [Arguments](#arguments) > - [Custom](#custom) ## Getting started 🚀 The package is available via [NPM]: ```sh npm i -D @slidy/animation ``` or from [CDN]: ```html <script src="https://unpkg.com/@slidy/animation"></script> ``` ## Usage Animation functions available via named import as `MJS/CJS` module or via global `Window.Slidy` object props as `IIFE`. Includes `fade, flip, matrix, rotate, scale, stairs, translate` & `blur, deck, shuffle` in progress as functions. ```ts type Options = { index: number, // current active slide index snap: Snap; // snapping side position: number; // current position vertical: boolean, // node children flow reverse: boolean, // node children reverse flow } type Snap = 'start' | 'center' | 'end' | 'deck' | undefined; interface Child extends HTMLElement { i: number; // child index in array index: number; // child index active: number; // `options.loop ? cix : options.index` size: number; // `size + gap` by axis dist: number; // distance to snap position track: number; // move to the size of the slide from its snap point +/- in the direction turn: number; // `-1 <- child.track / child.size -> 1` exp: number; // interpolated child.track `0 <- exp -> 1` } type AnimationArgs = { node: HTMLElement; // target slidy node child: Child; // extended childNode object options: Options; // options: index, position, vertical, reverse, snap translate: string; // basic translate needed in any function `{ transform: translate }` }; type AnimationFunc = (args: AnimationArgs) => CSSStyleDeclaration; ``` ### MJS/CJS module import ```html <head> <script type="module"> import * as animation from 'https://unpkg.com/@slidy/animation/dist/index.mjs'; // MJS module // OR import * as animation from 'https://unpkg.com/@slidy/animation/dist/index.cjs'; // CJS module </script> </head> ``` ### IIFE as `Window` Object ```html <head> <script src="https://unpkg.com/@slidy/animation/dist/index.js"></script> </head> <script> window.onload = () => animation = SlidyAnimation.matrix() </script> ``` ### As third party module in any frameworks ```svelte <!-- Svelte --> <script> import { fade } from '@slidy/animation'; <Slidy animation={fade} /> </script> ``` ## Arguments | Name | Type | Description | | :---------- | :------------ | :---------- | | `node` | `HTMLElement` | Target slidy Node | | `child` | `Child` | Extended childNode object | | `options` | `Options` | Helped options from @slidy/core | | `translate` | `string` | Basic translate needed in any function `{ transform: translate }` | ### Child | Name | Type | Description | | :------- | :------- | :---------- | | `i` | `number` | Index in array | | `index` | `number` | Index in core | | `active` | `number` | `options.loop ? cix : options.index` | | `size` | `number` | `size + gap` by options.vertical | | `dist` | `number` | Distance to snap position | | `track` | `number` | Move by slide size from its snap point +/- in the direction | | `turn` | `number` | `-1 <- child.track / child.size -> 1` | | `exp` | `number` | Interpolated child.track `0 <- exp -> 1` | ### Options | Name | Type | Description | | :--------- | :-------- | :---------- | | `index` | `number` | Current active slide index | | `snap` | `Snap` | Snapping side: `'start', 'center', 'end', 'deck', undefined` | | `position` | `number` | Current position | | `vertical` | `boolean` | Children vertical flow | | `reverse` | `number` | Children reverse flow: `-1` or `1` | ## Custom Like example `fade()` function. More in [animation.ts](https://github.com/Valexr/Slidy/blob/master/packages/animation/src/animation.ts) file. ```ts function fade({ child, translate }: AnimationArgs) { return { opacity: child.exp, // custom fade by exp transform: translate, // basic translate for coordinates }; } ``` MIT &copy; [Valexr](https://github.com/Valexr) [DEMO]: https://slidy-core.surge.sh [NPM]: https://www.npmjs.com/package/@slidy/animation [CDN]: https://unpkg.com/@slidy/animation/ [REPL]: https://svelte.dev/repl/e7a3683b13b342dc8ecfc1d9b2b806f6