Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/kitze/react-genie

A set of React components for animating elements as they scroll into the viewport
https://github.com/kitze/react-genie

Last synced: 4 days ago
JSON representation

A set of React components for animating elements as they scroll into the viewport

Awesome Lists containing this project

README

        

# 🧞‍♂️ react-genie

### 🙋‍♂️ Made by [@thekitze](https://twitter.com/thekitze)

### Other projects:
- 💻 [Sizzy](https://sizzy.co) - A browser for designers and developers, focused on responsive design
- 🏫 [React Academy](https://reactacademy.io) - Interactive React and GraphQL workshops
- 🔮 [Glink](https://glink.so) - Changelogs, Roadmap, User Requests
- 🐶 [Benji](https://benji.so) - Ultimate wellness and productivity platform
- 🤖 [JSUI](https://github.com/kitze/JSUI) - A powerful UI toolkit for managing JavaScript apps
- 📹 [YouTube Vlog](https://youtube.com/kitze) - Follow my journey

Zero To Shipped

## Used on [sizzy.co](https://sizzy.co)
![animation](https://i.imgur.com/0kK9C2P.gif)

## CodeSandbox
https://codesandbox.io/s/react-genie-example-8xfsc

## Demo
https://8xfsc.csb.app/

## Dependencies
- styled-components
- layout-styled-components
- react-animations
- react-intersection-observer

## Usage

`yarn add react-genie`

Just render the `RevealGlobalStyles` component anywhere, so it will add the class names for the animations:

```jsx
import {RevealGlobalStyles} from 'react-genie'

const App = () => {
return (



rest of the app


);
};
```

### Default animation:
```jsx
import {Reveal} from 'react-genie';

The default animation is fade in

```

## Props:
```js
{
animation?: string; // animation class name
delay?: number; // animation delay
mode?: RevealMode; // "clone" or "wrap"
debugName?: string; // if you specify it, you will get console logs
style?: CSSObject; // extra styles
onShowDone?: () => void; // callback after show
}
```

### Specifying animation using the `animation` prop:
```jsx
import {Reveal, Animation} from 'react-genie';

This title will slide in from the left

```
Hint: you can also pass your own class name here if you have custom animations.

### Wrap vs Clone

The default `mode` is `wrap`, so the children element will be wrapped in an additional div.
If you don't want that additional div, you can use `clone` or `RevealMode.Clone`.

```jsx
import {Reveal, RevealMode} from 'react-genie';

This h1 will be cloned instead of wrapped

```

In order for `clone` to work your element needs to accept `className`, `style`, and `ref`, as props. So, if you're trying to clone custom components, make sure they support these props.

### The `AnimatedTitle` component
```jsx
import {Reveal, AnimatedTitle} from 'react-genie';

This sentence will animate in word by word

```

The `AnimatedTitle` component will split the `children` prop word by word (so it should be a string), and animate each word with a delay in between.