A lightweight (1KB), high performance, react-hook for random text animations.
The hook receives a set of parameteres that allows you to customize the pace, and style of the animation.
yarn devWill start the playground minisite at http://localhost:1234 and build the library on watch mode
npm install use-scrambleThe hook returns a ref object, that you must apply to the target node, for the animation to take over.
import { useScramble } from 'use-scramble';
export const App = () => {
const { ref } = useScramble({
text: 'Achilles next, that nimble runner, swift on his feet as the wind',
speed: 0.6,
tick: 1,
step: 1,
scramble: 4,
seed: 0,
});
return <p ref={ref} />;
};Along with the ref, the hook returns a replay function, that you can call to start the animation manually.
You can also disable the first animation, by setting the playOnMount to false.
import { useScramble } from 'use-scramble';
export const App = () => {
const { ref, replay } = useScramble({
text: 'Achilles next, that nimble runner, swift on his feet as the wind',
playOnMount: false
});
return <p ref={ref} onMouseOver={replay} onMouseOut={replay} />;
};| Property | type | default | range | description |
|---|---|---|---|---|
| playOnMount | boolean | true | Skip the animation on the first mount input | |
| text | string | - | Set the text value of the animation. The animation, will start automatically. | |
| speed | number | 1 | 0-1 | Internal clock framerate. 1 will tick 60 times a second. 0 will pause the animation |
| tick | number | 1 | 1-∞ | Controls how many ticks pass for an animation redraw. Combined with speed, you can fully control the pace rate |
| step | number | 1 | 1-∞ | Controls the animation step. On every redraw, the algorithm moves forward, by step characters. |
| scramble | number | 1 | 0-∞ | Controls how many times to randomize each character. A value of 0 will emulate a typewriter effect. |
| seed | number | 1 | 0-∞ | The seed, adds randomized characters ahead of the animation step, animating characters across the text block. |
| chance | number | 1 | 0-1 | Chance of scrambling a character, range from 0 to 1, 0 being no chance, and 1 being 100% chance. |
| range | number[] | [65,125] | Unicode characters range to select random characters from | |
| overdrive | boolean, number | true | Defaults to underscore (95) unicode character, or provide a custom unicode value | |
| overflow | boolean | true | Overflow, animates over the previous text, and when false resets the text contents, and restarts the animation from an empty string. | |
| ignore | string[] | [" "] | Ignore specific characters when animating a string. By default only spaces are ignored, used to maintain the shape of the text. | |
| onAnimationStart | function | - | callback invoked when the animation starts playing | |
| onAnimationFrame | function | - | callback invoked on every redraw | |
| onAnimationEnd | function | - | callback invoked on when the animation ends |
Along with the ref the return value, contains a replay function, that you can invoke to restart the animation.
const { ref, replay } = useScramble({ text: 'your_text' });
return <p ref={ref} onclick={replay} />;If the user has requested to minimize non-essential motion with prefers-reduced-motion:reduce, the animation is entirely disabled.
| Glyph | Unicode | Description |
|---|---|---|
| 32 | Space mark | |
| ! | 33 | Exclamation mark |
| " | 34 | Quotation mark |
| # | 35 | Hash |
| $ | 36 | Dollar sign |
| % | 37 | Percent sign |
| & | 38 | Ampersand |
| ' | 39 | Apostrophe |
| ( | 40 | Left parenthesis |
| ) | 41 | Right parenthesis |
| * | 42 | Asterisk |
| + | 43 | Plus sign |
| "," | 44 | Comma |
| - | 45 | Hyphen-minus |
| . | 46 | Full stop |
| / | 47 | Slash (Solidus) |
| 0 | 48 | Digit Zero |
| 1 | 49 | Digit One |
| 2 | 50 | Digit Two |
| 3 | 51 | Digit Three |
| 4 | 52 | Digit Four |
| 5 | 53 | Digit Five |
| 6 | 54 | Digit Six |
| 7 | 55 | Digit Seven |
| 8 | 56 | Digit Eight |
| 9 | 57 | Digit Nine |
| : | 58 | Colon |
| ; | 59 | Semicolon |
| < | 60 | Less-than sign |
| = | 61 | Equal sign |
| > | 62 | Greater-than sign |
| ? | 63 | Question mark |
| @ | 64 | At sign |
| A | 65 | Latin Capital letter A |
| B | 66 | Latin Capital letter B |
| C | 67 | Latin Capital letter C |
| D | 68 | Latin Capital letter D |
| E | 69 | Latin Capital letter E |
| F | 70 | Latin Capital letter F |
| G | 71 | Latin Capital letter G |
| H | 72 | Latin Capital letter H |
| I | 73 | Latin Capital letter I |
| J | 74 | Latin Capital letter J |
| K | 75 | Latin Capital letter K |
| L | 76 | Latin Capital letter L |
| M | 77 | Latin Capital letter M |
| N | 78 | Latin Capital letter N |
| O | 79 | Latin Capital letter O |
| P | 80 | Latin Capital letter P |
| Q | 81 | Latin Capital letter Q |
| R | 82 | Latin Capital letter R |
| S | 83 | Latin Capital letter S |
| T | 84 | Latin Capital letter T |
| U | 85 | Latin Capital letter U |
| V | 86 | Latin Capital letter V |
| W | 87 | Latin Capital letter W |
| X | 88 | Latin Capital letter X |
| Y | 89 | Latin Capital letter Y |
| Z | 90 | Latin Capital letter Z |
| [ | 91 | Left Square Bracket |
| \ | 92 | Backslash |
| ] | 93 | Right Square Bracket |
| ^ | 94 | Circumflex accent |
| _ | 95 | Low line |
| ` | 96 | Grave accent |
| a | 97 | Latin Small Letter A |
| b | 98 | Latin Small Letter B |
| c | 99 | Latin Small Letter C |
| d | 100 | Latin Small Letter D |
| e | 101 | Latin Small Letter E |
| f | 102 | Latin Small Letter F |
| g | 103 | Latin Small Letter G |
| h | 104 | Latin Small Letter H |
| i | 105 | Latin Small Letter I |
| j | 106 | Latin Small Letter J |
| k | 107 | Latin Small Letter K |
| l | 108 | Latin Small Letter L |
| m | 109 | Latin Small Letter M |
| n | 110 | Latin Small Letter N |
| o | 111 | Latin Small Letter O |
| p | 112 | Latin Small Letter P |
| q | 113 | Latin Small Letter Q |
| r | 114 | Latin Small Letter R |
| s | 115 | Latin Small Letter S |
| t | 116 | Latin Small Letter T |
| u | 117 | Latin Small Letter U |
| v | 118 | Latin Small Letter V |
| w | 119 | Latin Small Letter W |
| x | 120 | Latin Small Letter X |
| y | 121 | Latin Small Letter Y |
| z | 122 | Latin Small Letter Z |
| { | 123 | Left Curly Bracket |
| | | 124 | Vertical bar |
| } | 125 | Right Curly Bracket |
| ~ | 126 | Tilde |