基于CSS实现MaterialUI按钮点击动画并封装成 React 组件

yizhihongxing

下面我会详细讲解如何基于CSS实现MaterialUI按钮点击动画并封装为React组件。

1.准备工作

安装MaterialUI

首先需要安装MaterialUI,可以使用npm或yarn进行安装。

npm install @material-ui/core

//或使用yarn
yarn add @material-ui/core

创建按钮组件

接着需要创建一个按钮组件,并引入MaterialUI的Button组件。

import React from "react";
import Button from "@material-ui/core/Button";

export default function MaterialButton({ onClick, children }) {
  return (
    <Button variant="contained" color="primary" onClick={onClick}>
      {children}
    </Button>
  );
}

现在,我们已经可以在其他的React组件中使用该按钮组件了。

2.实现动画效果

接下来,我们需要使用CSS来实现按钮点击时的动画效果。

添加样式

首先,创建一个CSS文件来存放样式。

.button {
  overflow: hidden;
  position: relative;
  z-index: 1;
  transition: transform 0.3s, opacity 0.3s;
}

.button:before {
  content: "";
  display: block;
  position: absolute;
  z-index: 2;
  top: 50%;
  left: 50%;
  width: 100px;
  height: 100px;
  margin: -50px 0 0 -50px;
  opacity: 1;
  border-radius: 50%;
  transform: scale(0);
  transition: transform 0.3s, opacity 0.3s;
  background: rgba(255, 255, 255, 0.6);
}

.button span {
  display: block;
  position: relative;
  z-index: 3;
}

.button.clicked:before {
  opacity: 0;
  transform: scale(3);
}

.button.clicked span {
  z-index: -1;
  opacity: 0;
  transform: translateY(50px);
}

绑定动画效果

然后,我们将该样式绑定到按钮组件上。

import React, { useState } from "react";
import Button from "@material-ui/core/Button";
import "./styles.css";

export default function MaterialButton({ onClick, children }) {
  const [clicked, setClicked] = useState(false);

  const handleClick = () => {
    setClicked(true);

    setTimeout(() => {
      setClicked(false);
    }, 300);

    if(onClick){
      onClick();
    }
  };

  return (
    <Button
      variant="contained"
      color="primary"
      className={`button ${clicked ? "clicked" : ""}`}
      onClick={handleClick}
    >
      <span>{children}</span>
    </Button>
  );
}

到此,我们就完成了按钮点击动画的实现和封装。

3.使用示例

下面是两个示例,展示如何在React中使用该按钮组件。

示例一

import React from "react";
import MaterialButton from "./MaterialButton";

export default function App() {
  const handleClick = () => {
    console.log("Button clicked");
  };

  return (
    <div>
      <MaterialButton onClick={handleClick}>Click Me</MaterialButton>
    </div>
  );
}

示例二

import React, { useState } from "react";
import MaterialButton from "./MaterialButton";

export default function App() {
  const [count, setCount] = useState(0);

  const handleClick = () => {
    setCount(count + 1);
  };

  return (
    <div>
      <p>You clicked the button {count} times</p>
      <MaterialButton onClick={handleClick}>Click Me</MaterialButton>
    </div>
  );
}

以上示例展示了如何在React中使用该按钮组件,并实现了点击动画,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于CSS实现MaterialUI按钮点击动画并封装成 React 组件 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • vue中jsonp插件的使用方法示例

    下面是“vue中jsonp插件的使用方法示例”的完整攻略。 1. 什么是JSONP JSONP,全称为“JSON with Padding”,是一种用于解决跨域请求的技术。在同源策略的限制下,通过script标签的src属性发送请求,服务器返回一段被包裹在回调函数中的JSON数据,然后前端将其解析并使用。 2. JSONP插件在Vue中的使用方法 在Vue中…

    Vue 2023年5月28日
    00
  • vue+element-ui前端使用print-js实现打印功能(可自定义样式)

    让我来为你详细讲解“vue+element-ui前端使用print-js实现打印功能(可自定义样式)”的完整攻略。 简介 在前端开发中,有时需要提供页面的打印功能。本篇攻略将介绍如何使用print-js插件实现可自定义样式的打印功能,使用的前端框架是Vue,UI组件库是Element-UI。 安装依赖 首先,我们需要安装print-js依赖: npm ins…

    Vue 2023年5月28日
    00
  • 浅谈Vue3.0新版API之composition-api入坑指南

    浅谈Vue3.0新版API之composition-api入坑指南 随着Vue3.0版本的发布,新版API也推出了许多新特性,其中最为引人注目的便是composition-api。如何使用新特性,帮助开发者更高效地编写Vue应用,将是本文所要探讨的内容。 什么是composition-api composition-api是Vue3.0版本全新的特性,它是一…

    Vue 2023年5月27日
    00
  • Vue.JS入门教程之自定义指令

    下面我就为你详细讲解 Vue.JS 入门教程之自定义指令的完整攻略。 什么是自定义指令 Vue.JS 中的指令是一种特殊的标记,可以在模板中使用,用于对 HTML 元素进行特殊处理。Vue.JS 提供了一些内建指令(例如 v-if、v-for、v-bind 等),同时也提供了自定义指令的功能,允许开发者自己定义指令来扩展 Vue.JS 的功能。 自定义指令通…

    Vue 2023年5月27日
    00
  • vue的状态更新方式(异步更新解决)

    首先我们来讲解一下vue的状态更新方式。 什么是Vue的状态更新方式 在Vue的运行过程中,当数据与页面发生交互时,Vue会重新渲染相应的视图,从而使用户界面得到更新。这种更新方式是自动的,也称为响应式更新,它是vue的核心特性之一。 为什么需要异步更新 但是,在某些情况下,我们需要手动更新数据,并且确保更新后的数据已经生效。在这种情况下,我们需要使用Vue…

    Vue 2023年5月29日
    00
  • Vue.Js中的$watch()方法总结

    首先,我们需要了解$watch()方法是什么以及它的作用。$watch()是Vue.js中一个重要的观察者模式,在Vue.js中可以通过$watch()方法来监视某个数据对象的变化,一旦发生变化就执行回调函数。下面详细介绍它的用法。 监听对象watch 简单的例子 我们可以通过如下代码创建一个简单的对象,并监听其中一个属性: var data = {mess…

    Vue 2023年5月29日
    00
  • Vue3 中的模板语法小结

    下面是 “Vue3 中的模板语法小结”的完整攻略。 Vue3 中的模板语法小结 描述 Vue3 中的模板语法是用于处理将数据渲染到视图的方式。这篇文章将概述 Vue3 中的模板语法,介绍一些常见的语法和用例。 插值语法 在 Vue3 中,你可以使用下面这些语法将变量插入到模板中: <!– 字符串插值 –> <p> {{ messa…

    Vue 2023年5月27日
    00
  • Vue3对比Vue2的优点总结

    Vue3对比Vue2的优点总结 1. 更快的速度 Vue3使用了Proxy对象,通过动态代理实现了响应式系统,比Vue2使用的Object.defineProperty()更加高效。Vue3还优化了渲染流程,比Vue2更快。 Vue3还支持组合式API,可以更灵活的管理组件中的逻辑和状态。 2. 更好的TypeScript支持 Vue3内置了TypeScri…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部