如何在 Material UI 中创建悬浮操作按钮动画?


悬浮操作按钮 (Floating action button) 是一种形状,中心带有一个图标,显示在所有屏幕内容的前面。Material UI 是一个知名的 React 组件库,提供一系列预先设计和可自定义的 UI 组件。在这些组件中,悬浮操作按钮 (FAB) 非常流行。

为了增强用户体验,我们可以为 FAB 添加动画,使其更具视觉吸引力和参与感。在本文中,我们将探讨如何在 Material UI 中为悬浮操作按钮创建动画。

什么是悬浮操作按钮?

现在让我们了解一下什么是悬浮操作按钮。这些按钮包含在应用程序的用户界面中,用于表示开发人员优先考虑的操作。只有当它确实是呈现屏幕主要操作的方式时,才应使用 FAB。

通常,建议每个屏幕只有一个 FAB 用于常用操作。FAB 有两种类型;扩展型。值得注意的是,悬浮操作按钮与按钮略有不同。

创建动画的步骤

下面,我们概述了使用 React 在 Material UI 中为悬浮操作按钮创建动画的分步过程。

步骤 1:创建一个新的 React 应用并安装 MUI

首先,让我们从创建一个 React 应用和安装 Material UI 开始。请按照以下步骤操作:

打开您的终端并运行以下命令:

npx create react app projectname

项目创建后,通过运行以下命令导航到项目目录:

cd projectname

通过运行以下命令安装 Material UI 及其依赖项:

npm install @mui/material @emotion/react @emotion/styled

步骤 2:将所需的组件导入 React

现在,创建新的 React 应用后,在 src 文件夹中有一个 main App.js 文件。打开它并导入所需的组件。

import React from "react";
import { Fab } from '@mui/material

export default function App() {
   return (

   )
}

现在我们已经完成了创建和导入所需组件的所有步骤。让我们探索一些示例,这些示例说明了使用不同方法为悬浮操作按钮创建动画。

悬浮操作按钮 API

  • <Fab> − 此 API 用于使用 Material UI 将悬浮操作按钮添加到项目中。

属性

  • children − 此属性定义 FAB 的内容。

  • classes − 此属性用于覆盖或向元素添加样式。

  • color − 此属性用于向悬浮操作按钮添加颜色。它包括 primary、secondary、success、info、error、warning 等。

  • component − 此属性定义 FAB 的组件。

  • disableFocusRipple − 如果此属性设置为 true,则键盘焦点将不会出现涟漪效果。

  • disabled − 此属性用于禁用 FAB。

  • disableRipple − 此属性用于禁用 FAB 的涟漪效果。

  • href − 此属性定义单击 FAB 时将跳转到的 URL。

  • size − 此属性用于更改 FAB 的大小。

  • sx − 此属性用于向 Material UI 组件添加自定义样式。

  • variant − 此属性用于选择要使用的 FAB,例如 circular、string 或 string。

示例

在本例中,我们将动画整合到悬浮操作按钮中。每当我们切换开关时,悬浮操作按钮都会伴随着这些动画效果优雅地出现。

import { Box, Fab, FormControlLabel, Switch } from "@mui/material";
import React, { useState } from "react";
import Zoom from "@mui/material/Zoom";
import { Add } from "@mui/icons-material";

export default function App() {
   const [checked, setChecked] = useState(false);
   const handleAnimate = () => {
      setChecked((pr) => !pr);
   };

   return (
      <div
         style={{
            display: "flex",
            marginTop: 30,
            flexDirection: "column",
            alignItems: "center",
            justifyContent: "center",
            gap: 10,
         }}>
         <FormControlLabel
            control={<Switch checked={checked} onChange={handleAnimate} />}
            label="Animate FAB"
         />
         <Box sx={{ display: "flex", gap: 10 }}>
            <Zoom in={checked}>
               <Fab color="info" size="medium">
                  <Add />
               </Fab>
            </Zoom>
            <Zoom in={checked}>
               <Fab color="info" size="medium">
                  <Add />
               </Fab>
            </Zoom>
         </Box>
      </div>
   );
}

输出

示例

在本例中,我们向悬浮操作按钮添加了三种不同的动画。当我们单击开关时,悬浮操作按钮会分别以淡入、缩放和增长动画弹出。

import { Box, Fab, Fade, FormControlLabel, Grow, Switch, Zoom } from "@mui/material";
import React, { useState } from "react";
import { Add } from "@mui/icons-material";

export default function App() {  
   const [checked, setChecked] = useState(false);
   const handleAnimate = () => {
      setChecked((pr) => !pr);
   };

   return (
      <div
         style={{
            display: "flex",
            marginTop: 30,
            flexDirection: "column",
            alignItems: "center",
            justifyContent: "center",
            gap: 10,
         }}>
         <FormControlLabel
            control={<Switch checked={checked} onChange={handleAnimate} />}
            label="Animate FAB"
         />
         <Box sx={{ display: "flex", gap: 10 }}>
         
            {/* Fade animation of floating action button */}
            <Fade in={checked}>
               <Fab color="info" size="medium">
                  <Add />
               </Fab>
            </Fade>
            
            {/* Zoom animation of floating action button */}
            <Zoom in={checked}>
               <Fab color="info" size="medium">
                  <Add />
               </Fab>
            </Zoom>
            
            {/* Grow animation of floating action button */}
            <Grow in={checked}>
               <Fab color="info" size="medium">
                  <Add />
               </Fab>
            </Grow>
         </Box>
      </div>
   );
}

输出

示例

在本例中,我们将动画集成到悬浮操作按钮中。为此,我们利用 react swipeable views 库创建了两个选项卡。每当单击选项卡时,悬浮操作按钮都会以淡入动画平滑过渡。

import React from "react";
import PropTypes from "prop-types";
import SwipeableViews from "react-swipeable-views";
import { useTheme } from "@mui/material/styles";
import AppBar from "@mui/material/AppBar";
import Tabs from "@mui/material/Tabs";
import Tab from "@mui/material/Tab";
import Fab from "@mui/material/Fab";
import Typography from "@mui/material/Typography";

import { useState } from "react";
import { Add } from "@mui/icons-material";
import { Fade } from "@mui/material";

function MyCustomTab({ children: items, value, index, ...other }) {
   return (
      <Typography component="div" hidden={value !== index} {...other}>
         {value === index && (
            <span style={{ fontSize: 20, color: "green", padding: 4 }}>
               {items}
            </span>
         )}
      </Typography>
   );
}

MyCustomTab.propTypes = {
   children: PropTypes.node,
   index: PropTypes.number.isRequired,
   value: PropTypes.number.isRequired,
};

export default function App() {
   const [val, setVal] = useState(0);
   const theme = useTheme();

   const handleChange = (event, newValue) => {
      setVal(newValue);
   };

   const handleAnimateIdx = (idx) => {
      setVal(idx);
   };

   const transitionDuration = {
      enter: theme.transitions.duration.enteringScreen,
      exit: theme.transitions.duration.leavingScreen,
   };

   const fabData = [
      {
         id: 1,
      },
      {
         id: 2,
      },
   ];

   return (
      <div
         style={{
            display: "flex",
            marginTop: 30,
            flexDirection: "column",
            alignItems: "center",
            justifyContent: "center",
            gap: 10,
         }}>
         <div
            style={{
               backgroundColor: "white",
               width: 500,
               position: "relative",
               height: 300,
            }}>
            <AppBar color="inherit" position="static">
               <Tabs
                  value={val}
                  onChange={handleChange}
                  indicatorColor="primary"
                  textColor="secondary"
                  variant="fullWidth"
               >
                  <Tab label="Java" />
                  <Tab label="C++" />
               </Tabs>
            </AppBar>
            <SwipeableViews
               axis={theme.direction === "rtl" ? "x-reverse" : "x"}
               index={val}
               onChangeIndex={handleAnimateIdx}
            >
               <MyCustomTab value={val} index={0} dir={theme.direction}>
                  Java
               </MyCustomTab>
               <MyCustomTab value={val} index={1} dir={theme.direction}>
                  C++
               </MyCustomTab>
            </SwipeableViews>
            {fabData.map((fab, index) => (
               <Fade
                  key={fab.id}
                  in={val === index}
                  timeout={transitionDuration}
                  style={{
                     transitionDelay: `${
                        val === index ? transitionDuration.exit : 0
                     }ms`,
                  }}
                  unmountOnExit
               >
                  <Fab
                     sx={{ position: "absolute", bottom: 16, right: 16 }}
                     color="success"
                  >
                     <Add />
                  </Fab>
               </Fade>
            ))}
         </div>
      </div>
   );
}

输出

结论

在本文中,我们探讨了使用 React 在 Material UI 中为操作按钮制作动画的过程。我们讨论了创建这些按钮的步骤以及如何应用各种动画(如缩放、增长、淡入等)以增加吸引力。通过加入这些动画,您的应用程序将变得更具视觉吸引力,并提高用户参与度,从而提高您网站的用户参与度。

更新于:2023年10月30日

239 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始
广告