推荐 3 个 React 动画库

简介: 为静态网站添加一些动画效果是一项改善用户体验的有效方式,创建视觉上漂亮的内容时,或者当想要突出一个元素从一种状态到另一种状态的过渡时,以此给用户带来视觉上的震撼,给用户留下印象。当然,并非动画越多越好,要恰到好处。

为静态网站添加一些动画效果是一项改善用户体验的有效方式,创建视觉上漂亮的内容时,或者当想要突出一个元素从一种状态到另一种状态的过渡时,以此给用户带来视觉上的震撼,给用户留下印象。当然,并非动画越多越好,要恰到好处。

本文推荐 3 个 React 动画库,它们易于使用,并且只需增加运动量和视觉效果,就可以让事情变得有趣而不会过度使用。

React Transition Group

React Transition Group 库是一个简单和强大的实用动画库。

这个库实现效果非常简单:它唯一做的就是跟踪组件的 enterexit 状态。如何处理这些信息以及决定如何制作动画,取决于开发者和及其 CSS 技能。作为一个前端开发工程师应该对行业内常见的动画效果的实现原理有一定的了解,甚至可以自己实现。实用第三方库是为了提高效率,而非取代其技能。

npm install react-transition-group --save

看看下面的示例代码:

import Header from "./header";
import Footer from "./footer";
import { useState } from "react";
import { Transition } from "react-transition-group";
const duration = 300;
const defaultStyle = {
    transition: `opacity ${duration}ms ease-in-out`,
    opacity: 0,
};
const transitionStyles = {
    entering: { opacity: 1 },
    entered: { opacity: 1 },
    exiting: { opacity: 0 },
    exited: { opacity: 0 },
};
export default function Layout({ children, title }) {
    const [inProp, setInProp] = useState(false);
    const delay = () => {
        setTimeout(() => {
            !inProp && setInProp(!inProp);
        }, 500);
    };
    delay();
    return (
        <>
            <Header title={title} />
            <main>
                <Transition in={inProp} timeout={500}>
                    {(state) => (
                        <div
                            style={{
                                ...defaultStyle,
                                ...transitionStyles[state],
                            }}
                        >
                            {children}
                        </div>
                    )}
                </Transition>
            </main>
            <Footer />
        </>
    );
}

具体可以查阅代码仓库:github.com/QuintionTan…

这个库的主要优势是入门非常简单。然而,这也是主要的缺点,因为它在很大程度上依赖于对 CSS 过渡的了解。

React Reveal

React-Reveal 与前面的例子完全相反。它没有提供基本的构建块来完成想要的所有自定义动画,而是带有一组预定义动画效果供使用。

npm install react-reveal --save

看看下面的示例代码:

import Header from "./header";
import Footer from "./footer";
import { useState } from "react";
import Fade from "react-reveal/Fade";
export default function Layout({ children, title }) {
    let [show, setShow] = useState(false);
    const delay = () => {
        setTimeout(() => {
            !show && setShow(!show);
        }, 500);
    };
    delay();
    return (
        <>
            <Header title={title} />
            <main>
                <Fade top when={show}>
                    {children}
                </Fade>
            </main>
            <Footer />
        </>
    );
}

具体可以查阅代码仓库:github.com/QuintionTan…

如果希望为应用程序添加一些微妙的效果,而不必担心 CSS、过渡和除了要导入的组件之外的任何其他事情,这绝对是一个更好的选择。

React Spring

最后,如果对于对视觉要求更高,那么可以选择 React Spring。与前两个专注于 CSS 过渡相比, React Spring 允许添加 spring-physics-based 的动画。

换句话说,使用CSS过渡,可以设置一个初始的视觉状态,以及一个最终的视觉状态,并告诉它在给定的时间内在它们之间进行过渡,但使用基于  React Spring  的物理,可以创建视觉上吸引人的动画,看起来和行为“更自然”。就好像实际上是在使用弹簧来移动或拉动元素一样。

npm install react-spring --save

看看下面的示例代码:

import Header from "./header";
import Footer from "./footer";
import { useState } from "react";
import { useSpring, config, animated } from "react-spring";
export default function Layout({ children, title }) {
    const [show, setShow] = useState(true);
    const properties = {
        to: { opacity: 1 },
        from: { opacity: 0 },
        reset: true,
        delay: 200,
        config: config.molasses,
    };
    const toggleText = () => {
        setShow(!show);
        api.start({
            ...properties,
            to: { opacity: show ? 1 : 0 },
            from: { opacity: show ? 0 : 1 },
        });
    };
    const [props, api] = useSpring(() => properties);
    const delay = () => {
        setTimeout(() => {
            !show && toggleText();
        }, 500);
    };
    delay();
    return (
        <>
            <Header title={title} />
            <main>
                <animated.div style={props}>{children}</animated.div>
            </main>
            <Footer />
        </>
    );
}

具体可以查阅代码仓库:github.com/QuintionTan…


相关文章
|
1月前
|
前端开发 JavaScript UED
React 图标库使用指南
本文详细介绍如何在 React 项目中使用 `react-icons` 等图标库,涵盖环境搭建、基础使用、常见问题与易错点、高级用法等内容,并通过代码案例进行说明。适合初学者和进阶开发者参考。
51 8
|
2月前
|
前端开发 JavaScript API
React开发需要了解的10个库
本文首发于微信公众号“前端徐徐”,介绍了React及其常用库。React是由Meta开发的JavaScript库,用于构建动态用户界面,广泛应用于Facebook、Instagram等知名网站。文章详细讲解了Axios、Formik、React Helmet、React-Redux、React Router DOM、Dotenv、ESLint、Storybook、Framer Motion和React Bootstrap等库的使用方法和应用场景,帮助开发者提升开发效率和代码质量。
136 4
React开发需要了解的10个库
|
2月前
|
资源调度 前端开发 JavaScript
React中classnames库使用
【10月更文挑战第7天】
|
1月前
|
资源调度 前端开发 JavaScript
React 测试库 React Testing Library
【10月更文挑战第22天】本文介绍了 React Testing Library 的基本概念和使用方法,包括安装、基本用法、常见问题及解决方法。通过代码案例详细解释了如何测试 React 组件,帮助开发者提高应用质量和稳定性。
53 0
|
3月前
|
前端开发
React技术栈-react使用的Ajax请求库实战案例
这篇文章介绍了在React应用中使用Axios和Fetch库进行Ajax请求的实战案例,展示了如何通过这些库发送GET和POST请求,并处理响应和错误。
61 10
React技术栈-react使用的Ajax请求库实战案例
|
3月前
|
前端开发
React技术栈-react使用的Ajax请求库用户搜索案例
这篇文章展示了一个React技术栈中使用Ajax请求库(如axios)进行用户搜索的实战案例,包括React组件的结构、状态管理以及如何通过Ajax请求获取并展示GitHub用户数据。
37 7
React技术栈-react使用的Ajax请求库用户搜索案例
|
4月前
|
存储 前端开发 JavaScript
|
5月前
|
存储 前端开发 JavaScript
前端框架与库 - React基础:组件、Props、State
【7月更文挑战第12天】React是JavaScript库,专注UI构建,基于组件化。组件是UI模块,可函数式或类定义。Props是组件间安全传递数据的只读参数,用defaultProps和propTypes保证正确性。State则是组件内部可变数据,用于驱动更新。使用setState()确保正确变更和渲染。了解并妥善处理这些概念是高效React开发的基础。
76 7
|
5月前
|
前端开发 JavaScript 开发者
前端框架与库 - React生命周期与Hooks
【7月更文挑战第13天】React 框架革新UI构建,引入Hooks简化组件状态管理和副作用处理。组件生命周期涉及挂载、更新、卸载,对应不同方法,如`componentDidMount`、`shouldComponentUpdate`等,但现在推荐使用`useState`和`useEffect` Hooks。`useEffect`处理副作用,需注意清理和依赖数组。避免问题的关键在于正确使用Hooks和理解其工作模式,以构建高效应用。
58 2
|
7月前
|
前端开发 Android开发 iOS开发
应用研发平台EMAS使用 aliyun-react-native-push 库接入推送和辅助通道,推送都可以收到,但是在App切到后台或者杀掉进程之后就收不到推送了,是需要配置什么吗?
【2月更文挑战第31天】应用研发平台EMAS使用 aliyun-react-native-push 库接入推送和辅助通道,推送都可以收到,但是在App切到后台或者杀掉进程之后就收不到推送了,是需要配置什么吗?
130 2