React + React-tsparticles + Tsparticles完成炫酷的登录特效

news2024/11/13 22:34:22

效果(动态)

npm i react-tsparticles@2.12.2
npm i tsparticles@2.12.0

注意:最好和上面的版本一样,不然会出现一个报错,具体如何解决的话去官网吧,上面的版本是没有问题的

代码块

总计6个代码块, options里面是相关粒子的配置

完整代码

import './index.sass'
import { Form, Input, Button, Card, Checkbox, message } from 'antd';
import type { LoginData } from '../../types/login'
import Particles from 'react-tsparticles'
import { loadFull } from "tsparticles";
import { getLogin } from '../../api/login'
import { useNavigate } from "react-router-dom";


const LoginIndex = () => {
  const navigate = useNavigate();
  //组件的最外层
  const particlesInit = async (main: any) => {
    await loadFull(main);
  };

  //粒子被正确加载到画布中时,这个函数被调用
  const particlesLoaded: any = (container: any) => {
    console.log("123", container);
  };

  const options: any = {
    "background": {
      "color": {
        "value": "#232741"
      },
      "position": "50% 50%",
      "repeat": "no-repeat",
      "size": "cover"
    },
    // 帧数,越低越卡,默认60
    "fpsLimit": 120,
    "fullScreen": {
      "zIndex": 1
    },
    "interactivity": {
      "events": {
        "onClick": {
          "enable": true,
          "mode": "push"
        },
        "onHover": {
          "enable": true,
          "mode": "slow"
        }
      },
      "modes": {
        "push": {
          //点击是添加1个粒子
          "quantity": 3,
        },
        "bubble": {
          "distance": 200,
          "duration": 2,
          "opacity": 0.8,
          "size": 20,
          "divs": {
            "distance": 200,
            "duration": 0.4,
            "mix": false,
            "selectors": []
          }
        },
        "grab": {
          "distance": 400
        },
        //击退
        "repulse": {
          "divs": {
            //鼠标移动时排斥粒子的距离
            "distance": 200,
            //翻译是持续时间
            "duration": 0.4,
            "factor": 100,
            "speed": 1,
            "maxSpeed": 50,
            "easing": "ease-out-quad",
            "selectors": []
          }
        },
        //缓慢移动
        "slow": {
          //移动速度
          "factor": 2,
          //影响范围
          "radius": 200,
        },
        //吸引
        "attract": {
          "distance": 200,
          "duration": 0.4,
          "easing": "ease-out-quad",
          "factor": 3,
          "maxSpeed": 50,
          "speed": 1

        },
      }
    },
    //  粒子的参数
    "particles": {
      //粒子的颜色
      "color": {
        "value": "#ffffff"
      },
      //是否启动粒子碰撞
      "collisions": {
        "enable": true,
      },
      //粒子之间的线的参数
      "links": {
        "color": {
          "value": "#ffffff"
        },
        "distance": 150,
        "enable": true,
        "warp": true
      },
      "move": {
        "attract": {
          "rotate": {
            "x": 600,
            "y": 1200
          }
        },
        "enable": true,
        "outModes": {
          "bottom": "out",
          "left": "out",
          "right": "out",
          "top": "out"
        },
        "speed": 6,
        "warp": true
      },
      "number": {
        "density": {
          "enable": true
        },
        //初始粒子数
        "value": 60
      },
      //透明度
      "opacity": {
        "value": 0.5,
        "animation": {
          "speed": 3,
          "minimumValue": 0.1
        }
      },
      //大小
      "size": {
        "random": {
          "enable": true
        },
        "value": {
          "min": 1,
          "max": 3
        },
        "animation": {
          "speed": 20,
          "minimumValue": 0.1
        }
      }
    }
  };

  const getLoginMessage = (data: LoginData) => {
    try {
      getLogin(data).then(res => {
        if (res.data.code === 200) {
          message.success(res.data.message);
          localStorage.setItem('token', res.data.data.token);
          localStorage.setItem('username', res.data.data.username);
          // 跳转到首页
          setTimeout(() => {
            navigate('/dashboard', { replace: true })
          }, 1000)
        } else {
          message.error(res.data.message);
        }
      });
    } catch (err) {
      console.log(err)
    }
  };

  const onFinish = (values: LoginData) => {
    getLoginMessage(values);
  };

  return (
    <div >
      <Card className='login-card'>
        <Particles id="tsparticles" init={particlesInit} loaded={particlesLoaded} options={options} />
        <Form
          name="normal_login"
          initialValues={{ remember: true }}
          onFinish={onFinish}
          className='login-index'
        >
          <Form.Item>
            <h3 className='login-title'>Welcome  KoaSystem</h3>
          </Form.Item>
          <Form.Item
            name="username"
            rules={[{ required: true, message: '请输入你的用户名!' }]}
          >
            <Input placeholder="用户名" />
          </Form.Item>
          <Form.Item
            name="password"
            rules={[{ required: true, message: '请输入你的密码!' }]}
          >
            <Input.Password placeholder="密码" />
          </Form.Item>

          <Form.Item>
            <Button type="primary" htmlType="submit" block>
              登录
            </Button>
          </Form.Item>
          <Form.Item<LoginData>
            name="remember"
            valuePropName="checked"
            wrapperCol={{ offset: 8, span: 16 }}
          >
            <Checkbox>记住密码</Checkbox>
          </Form.Item>
        </Form>
      </Card>
    </div>
  )
}

export default LoginIndex

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2038084.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5个人共享一台高配工作站流程运行SW UG等软件大装配设计

如何实现5个人共享一台高配工作站流程运行SW UG等软件大装配设计&#xff1f; 一、前期准备 硬件准备&#xff1a; 选购一台高性能的服务器作为云主机&#xff0c;确保服务器具备足够的计算能力、内存和存储空间以支持多用户并发使用。云主机需要结合企业具体的使用情况和人数…

基于vue框架的哀牢犁耙会助农系统r4347(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,商品分类,商品信息 开题报告内容 基于Vue框架的哀牢犁耙会助农系统 开题报告 一、研究背景与意义 1.1 研究背景 随着科技的飞速发展&#xff0c;农业现代化已成为全球农业发展的重要趋势。传统的农业生产方式已难以满足现代农…

windows使用vscode和cmake编译报错error C2001: 常量中有换行符

报错图&#xff1a; 解决方法&#xff1a;修改通过编码保存的格式为GBK

微信小程序--23(条件渲染)

一、wx&#xff1a;if 1.作用 来判断是否需要渲染 2.语句 wx&#xff1a;if “{{condition}}”来判断是否需要渲染该代码块 wx&#xff1a;elifwx&#xff1a;else 用来添加else判断 3.演示 二、<block> wx&#xff1a;if 1.作用 <block>标签&#xff1a;…

4章7节:用R做数据重塑,数据去重和数据的匹配

在数据科学的分析流程中&#xff0c;数据重塑是一项非常重要的操作。数据的重塑通常指将数据从一种形式转换为另一种形式&#xff0c;以满足后续分析的需求。R语言提供了丰富的工具和函数来帮助用户高效地进行数据重塑操作。本文中&#xff0c;我们将深入探讨数据重塑的概念及其…

假如你正在备考六西格玛黑带,请看我的推文

众所周知&#xff0c;红宝书是备考六西格玛黑带的经典教材之一。那么&#xff0c;如何用红宝书高效备考六西格玛黑带呢&#xff1f;天行健六西格玛培训讲师总结如下&#xff1a; 1. 熟悉六西格玛概念&#xff1a;首先&#xff0c;你需要对六西格玛的基本概念有一个清晰的了解。…

智启万象|挖掘广告变现潜力,保障支付安全便捷

谷歌致力于为开发者提供 先进的广告变现与支付解决方案 一起回顾 2024 Google 开发者大会 了解如何利用谷歌最新工具和功能 提高变现收入&#xff0c;优化用户体验&#xff0c;保障交易安全 让变现更上一层楼 广告检查器是谷歌 AdMob 平台最新推出的高级测试工具&#xff0c;开…

mitmproxy 安装配置

下载地址&#xff1a; mitmproxy - an interactive HTTPS proxy 安装好之后&#xff0c;配置环境变量 我的电脑--右键---属性-----高级系统设置----环境变量-----path----编辑---将安装目录地址复制过来&#xff08;到 bin &#xff09; 查看版本&#xff1a;cmd----- mitmd…

【C++】——初识模板

目录 一、泛型编程 二、函数模板 2.1 定义 2.2 格式 2.3 生成原理 2.4 实例化 2.4.1 隐式实例化 2.4.2 显式实例化 2.5 匹配原则 三、类模板 3.1 定义格式 3.2 实例化 一、泛型编程 什么是泛型编程&#xff0c;大家可思考这个问题&#xff1a;swap函数大家都会实现&#x…

利用ZXing.Net Bindings for EmguCV识别条形码及绘制条形码边框17(C#)

上一篇博文&#xff1a;绘制条形码的效果不是很好&#xff1a;利用Emgucv绘制条形码边框16(C#)-CSDN博客 测试环境&#xff1a; win11 64位操作系统 visual studio 2022 ZXing.Net.Bindings.EmguCV 0.16.4 测试步骤如下&#xff1a; 1 新建.net framework 4.8的控制台项目…

正确利用AI工具,你的facebook广告效果将翻倍

如今投放facebook广告&#xff0c;你面临的对手已经不再是广告投手&#xff0c;而是AI&#xff0c;如果你的广告效果一直无法提升&#xff0c;不妨试着借助一下AI的力量&#xff0c;今天这篇文章就教你怎样才能让AI发挥它的最大价值&#xff0c;帮助我们的facebook广告效果提升…

STM32驱动SG90舵机完成控制

一、前言 SG90舵机的工作原理主要是基于PWM&#xff08;脉冲宽度调制&#xff09;信号来控制。 SG90舵机内部有一个基准电压&#xff0c;微处理器产生的PWM信号通过信号线进入舵机&#xff0c;产生直流偏置电压&#xff0c;与舵机内部的基准电压做比较获得电压差输出。电压差的…

精品在线试题库系统

TOC springboot108精品在线试题库系统 绪论** 1.1 研究背景 现在大家正处于互联网加的时代&#xff0c;这个时代它就是一个信息内容无比丰富&#xff0c;信息处理与管理变得越加高效的网络化的时代&#xff0c;这个时代让大家的生活不仅变得更加地便利化&#xff0c;也让时…

Carry你飞驰:VELO Prevail TT坐垫,不是超人,也能飞!

确认过黑丝腿&#xff0c;是很爱骑的人&#xff01;以前脚踩二八大杠&#xff0c;就能赚足出街回头率&#xff0c;现在的打工牛马是坚持早c晚c&#xff0c;晨骑夜骑解压续命。夏日的阳光炙烤着大地&#xff0c;空气中弥漫着滚滚热浪&#xff0c;对于每一位热爱骑行的骑士来说&a…

WindowsAPI 查阅笔记:网络通信

客户端&#xff1a; 记得在编译的时候加上这个 -lwsock32 -lws2_32。 不然会报错 undefined reference to __imp_WSAStartup‘。 注意&#xff1a;如果端口在此之前被占了&#xff0c;则不会发生预期的结果 服务端&#xff0c;得到连接后创建线程&#xff0c;执行处理函数。…

你真的了解电子标签的潜力吗?3秒快刷颠覆你的想象

随着ESL电子标签在零售领域的大范围应用&#xff0c;其方便快捷更改显示内容的功能也逐渐拓展到仓储显示领域。但是仓储作业过程中货品出入库频繁&#xff0c;常规电子标签在实际使用过程中存在刷新速度偏长&#xff0c;无法充分满足仓储出入库数据更新的需求。因此&#xff0c…

阿里云智能大数据演进

本文根据7月24日飞天发布时刻产品发布会、7月5日DataFunCon2024北京站&#xff1a;大数据大模型.双核时代实录整理而成&#xff0c;演讲信息如下&#xff1a; 演讲人&#xff1a;徐晟 阿里云研究员/计算平台产品负责人 主要内容&#xff1a; Overview - 阿里云大数据 AI 产品…

秋招突击——面经整理——有塔游戏提前批

文章目录 引言正文一面说一下堆排序 二面有了解过游戏后端应该是干什么的吗&#xff1f;博客是从什么时候开始写的&#xff1f;平常在哪里做题&#xff1f;做了多少题&#xff1f;给你二维矩阵&#xff0c;零代表可以走&#xff0c;一代表不可以走&#xff0c;从起点到终点&…

Java:文件IO

JavaEE16 一、文件系统操作 在java标准库中&#xff0c;实现了File类&#xff0c;其中提供了文件操作的方法&#xff01; 1、构造方法&#xff1a; 方法名说明 File(File parent , String child) 根据父目录孩子文件路径&#xff0c;创建一个新的File 实例File( String path…

dockers 阿里云镜像失效后如何配置,可视化操作

Windows 环境 Client:Version: 24.0.6Context: defaultDebug Mode: false方法一 docker-desktop 配置方式 {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,…