react-transition-preset
Version:
Lightweight, zero-dependency transition component for React with common preset transition
182 lines (144 loc) • 3.42 kB
Markdown
# react-transition-preset
> 轻量零依赖的 React 过渡组件,预设了常见过渡效果
[English Docs](./README.md)
## 在线演示
[例子](https://hemengke1997.github.io/react-transition-preset/)
## 安装
```bash
npm install react-transition-preset
```
## 使用
```tsx
import { Transition } from 'react-transition-preset'
function Demo({ opened }: { opened: boolean }) {
return (
<Transition
mounted={opened}
transition='fade'
duration={0.4}
timingFunction='ease'
>
<div>Hello, World!</div>
</Transition>
)
}
```
如果你的组件有样式属性,你可以使用渲染函数
```tsx
import { Transition } from 'react-transition-preset'
function Demo({ opened }: { opened: boolean }) {
return (
<Transition mounted={opened}>
{(styles) => <div style={{
...styles,
// 自定义样式
}}>Hello, World!</div>}
</Transition>
)
}
```
## Viewport 视窗过渡
`mounted` 选项支持 `whileInView`,当元素进入或离开视窗时,开始过渡动画
```tsx
import { Transition } from 'react-transition-preset'
function Demo() {
return (
<Transition mounted='whileInView'>
<div>Hello, World!</div>
</Transition>
)
}
```
## 全局配置
```ts
import { setGlobalConfig } from 'react-transition-preset'
setGlobalConfig({
duration: 0.2,
timingFunction: 'linear',
transition: 'fade-up'
})
```
## API
```ts
interface TransitionProps {
/**
* @description 确定组件是否应该挂载到 DOM
* @default false
*/
mounted: boolean | 'whileInView'
/**
* @description 如果设置了,当元素隐藏时不会从 DOM 中卸载,而是应用 `display: none` 样式
* @default false
*/
keepMounted?: boolean
/**
* @description 如果 mounted 是 `whileInView`,此选项透传 useInView
*/
viewport?: UseInViewOptions & {
/** 自定义占位元素类型,默认 `div` */
placeholder?: React.ElementType
/** 占位元素HTML属性 */
attributes?: React.HTMLAttributes<React.ElementType>
}
/**
* @description 过渡名称或对象
* @default 'fade'
*/
transition?: PresetTransition
/**
* @description 在初始化时设置过渡
* @default false
*/
initial?: boolean
/**
* @description 过渡持续时间(秒)
* @default 0.2
*/
duration?: number
/**
* @description 退出过渡持续时间(秒)
* @default 0.2
*/
exitDuration?: number
/**
* @description 过渡时间函数
* @default 'ease'
*/
timingFunction?: string
/**
* @description 带有过渡样式参数的渲染函数
*/
children: JSX.Element | ((styles: React.CSSProperties) => JSX.Element)
/**
* @description 是否减少动画
* @default false
*/
reduceMotion?: boolean
/**
* @description 当退出过渡结束时调用
*/
onExited?: () => void
/**
* @description 当退出过渡开始时调用
*/
onExit?: () => void
/**
* @description 当进入过渡开始时调用
*/
onEnter?: () => void
/**
* @description 当进入过渡结束时调用
*/
onEntered?: () => void
/**
* @description 进入过渡开始前的延迟时间(秒)
* @default 0
*/
enterDelay?: number
/**
* @description 退出过渡开始前的延迟时间(秒)
* @default 0
*/
exitDelay?: number
}
```