【react】插件react-tsparticles和tsparticles实现粒子特效:

news2024/11/16 3:35:18

文章目录

        • 一、效果图:
        • 二、实现思路:
        • 三、实现代码:
            • 【1】安装依赖
            • 【2】


一、效果图:

在这里插入图片描述

二、实现思路:

particles(npm i react-particles-js)目前已被弃用;取代它的是tsparticles(npm i react-tsparticles 和npm install tsparticles)=>官网自己都不写参数的作用,离大谱
【官网地址】https://particles.js.org/和https://www.npmjs.com/package/react-tsparticles
在这里插入图片描述

三、实现代码:

【1】安装依赖
npm i react-tsparticles 
npm install tsparticles
【2】

在这里插入图片描述
在这里插入图片描述

import React from 'react'
//引入
import Particles from 'react-tsparticles'
import { loadFull } from "tsparticles";

import { LockOutlined, UserOutlined } from '@ant-design/icons';
import { Button, Checkbox, Form, Input, message } from 'antd';

import './Login.css'

import axios from 'axios'

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

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

export default function Login() {
  //粒子参数
  const options = {
    "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": 40
      },
      //透明度
      "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 onFinish = (values) => {
    axios.get(`/users?username=${values.username}&password=${values.password}&roleState=true&_expand=role`).then(res => {
      console.log(res.data)
      if (res.data.length === 0) {
        message.error("用户名或密码不匹配")
      } else {
        localStorage.setItem("token", JSON.stringify(res.data[0]))
        // props.history.push("/")
      }
    })
  };
  return (
    <div style={{ height: '100%', overflow: 'hidden' }}>
      <Particles id="tsparticles" init={particlesInit} loaded={particlesLoaded} options={options} />
      <Form name="normal_login" className="login-form" initialValues={{ remember: true, }} onFinish={onFinish}>
        <Form.Item>
          <h3 className="login-form-title">xxx系统</h3>
        </Form.Item>
        <Form.Item name="username" rules={[{ required: true, message: '请输入用户名!' }]}>
          <Input prefix={<UserOutlined className="site-form-item-icon" />} placeholder="请输入用户名" />
        </Form.Item>
        <Form.Item name="password" rules={[{ required: true, message: '请输入密码!' }]} >
          <Input prefix={<LockOutlined className="site-form-item-icon" />} type="password" placeholder="请输入密码" />
        </Form.Item>
        <Form.Item>
          <Form.Item name="remember" valuePropName="checked" noStyle>
            <Checkbox>记住密码</Checkbox>
          </Form.Item>
        </Form.Item>
        <Form.Item>
          <Button type="primary" htmlType="submit" className="login-form-button">登录</Button>
        </Form.Item>
      </Form>
    </div>
  )
}

在这里插入图片描述

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

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

相关文章

docker 安装应用

前文介绍&#xff1a;我们再阿里云领取的ECS服务器&#xff0c;服务器选择应用模板&#xff0c;他会自动帮我们的服务器安装docker的一些相关插件。如果没有&#xff0c;则需要自己安装docker docker 安装Jenkins 1.下载Jenkins镜像 推荐版本 jenkins/jenkins:lts 命令&…

python 实现简易的学员管理系统

文章目录 前言基本思路需求实现1.实现菜单的功能2.提示用户输入需要进行的操作&#xff0c;并执行相关操作3.具体函数功能的实现增加学员信息显示所有学员信息删除学员信息修改学员信息查询学员信息 整体代码展示 前言 前面我们已经学习了 python 的输入输出、条件语句、循环、…

面向对象编程主线三

面向对象编程 三、第三阶段 高内聚&#xff1a;类的内部数据操作细节自己完成&#xff0c;不允许外部干涉&#xff1b; 低耦合&#xff1a;仅对外暴露少量的方法用于使用。 封装性的设计思想&#xff1a;把该隐藏的隐藏起来&#xff0c;该暴露的暴露出来。 3.1、面向对象的特…

[物理层]传输方式

传输方式 串行传输与并行传输 穿行传输是指数据是一个比特一个比特依次发送的&#xff0c;在发送端与接收端只用一条数据线路 并行传输是指一次发n个比特&#xff0c;在发送端与接收端需要n条数据线路 在网络中计算机通信通常采用串行传输&#xff1b;而在计算机内部&#x…

Minio在Windows的部署并使用Python来操作桶

什么是Minio? MinIO 是一个开源的对象存储服务器&#xff0c;具有高可用性、高性能和可伸缩性。它兼容 Amazon S3 API&#xff0c;因此可以无缝地替代 Amazon S3 作为对象存储的解决方案。 MinIO 可以让你在自己的基础设施中搭建一个对象存储服务&#xff0c;使你能够存储和…

HTML5+CSS3+JS小实例:背景动态变化的登录界面2.0

实例:背景动态变化的登录界面2.0 技术栈:HTML+CSS+JS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" con…

malloc()与calloc()的辨析

malloc()与calloc()的相同点 两者都是常用的内存分配函数&#xff0c;用于动态分配内存 两者返回值类型都为void*&#xff0c;需要强制转换为所需类型 使用完分配的内存后&#xff0c;都需使用free()函数来释放该内存&#xff0c;防止内存泄漏 malloc()与calloc()的不同点 mal…

你可能不知道现在的Java面试有多卷

大家好&#xff0c;最近有不少小伙伴在后台留言&#xff0c;今年面试实在是太卷了&#xff0c;不知道从何下手&#xff01; 不论是跳槽涨薪&#xff0c;还是学习提升&#xff01;先给自己定一个小目标&#xff0c;然后再朝着目标去努力就完事儿了&#xff01; 为了帮大家节约…

threejs 音频可视化demo

效果&#xff1a; 在线效果预览&#xff1a;Vite App 源码&#xff1a;https://github.com/developer-wgl/ThreeJsDemo 参考&#xff1a;three.js 音乐可视化_threejs音乐可视化_汉武大帝的博客-CSDN博客

谈谈——互联网生活中的隐私保护

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

Unity VR:Oculus Integration 中 OVRManager 的 Eye Level,Floor Level,Stage 的区别

Oculus Integration 开发包中有个 OVRManager 脚本被挂载到 OVRCameraRig 物体上。OVR Manager 中有个 Tracking Origin Type 参数&#xff0c;它相当于追踪的参考系&#xff0c;参数分为 Eye Level, Floor Level 和 Stage。 VR 设备会对头显进行追踪&#xff0c;于是现实中头显…

VTK8.2.0的配置过程

VTK8.2.0的配置过程 1、官网下载vtk8.2.0的源码2、下载cmake3、使用cmake对源码进行编译4、报错后对cmake作如下修改配置5、使用vs2017打开生成的项目解决方案6、使用vs2017分别编译形成debug和release版本的可执行代码7、CMAKE_INSTALL_PREFIX/plugins/designer 目录下的 QVTK…

有AI助手帮你,刷任何题都不吃力!

Rider如何配置AI助手&#xff1f; 前言&#xff1a;一、选择AI助手二、如何在Rider中配置CodeWhisperer三、使用方法四、分享你的AI解决方案 明明自觉学会了不少知识&#xff0c;可真正开始做题时&#xff0c;却还是出现了“一支笔&#xff0c;一双手&#xff0c;一道力扣&…

RabbitMQ五种工作模式的简单应用

发布订阅模式(三种方式) 发布订阅模式上一篇我们已经介绍了,这里就不做介绍了,想要看的可以点此链接 在SpringBoot中对RabbitMQ三种使用方式_流殇꧂的博客-CSDN博客 Routing(路由模式)(基于注解的方式) 1.创建交换机和消息队列,类型要为direct(不设置也是默认的配置) //路由模式…

通信算法之173: 物理层峰均比PAPT

一. SC-FDMA技术 OFDM技术&#xff0c;能有效克服宽带通信系统中的频率选择性衰落&#xff0c;降低传输符号间干扰。但4G LTE标准&#xff0c;OFDMA只用在其下行传输&#xff0c;上行端采用了单载波频分复用技术&#xff08;single carrier frequency domain multiple access S…

【办公类-19-01】“微信表情”表情包上传,用Python调整各类尺寸、格式

背景需求&#xff1a; 今天学了“微信表情”的表情图上传流程&#xff0c;发现其中有多种尺寸参数&#xff0c;必须完全符合尺寸、格式&#xff0c;才能上传。 以上有PNG、GIF的不同&#xff0c;有50*50,120*120,240*240,750*400四款差异&#xff0c;手动修改太费时了 我想用…

我第一次面试自动化测试就被diss了,人生惨遭滑铁卢…

如果你恰好刚刚进入一家新公司&#xff0c;领导一上来就让你开展自动化测试&#xff0c;作为一名初出茅庐的测试新人&#xff0c;除了手足无措&#xff0c;你只能默默慨叹自己能力尚欠&#xff0c;眼前只会出现一个又一个无从下手的问题&#xff1a; 作为手工测试&#xff0c;…

MySQL的视图和索引(调优)

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于MySQL数据库的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.视图是什么&#xff1f; 二.视图…

【周末闲谈】关于计算机的二三事

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️周末闲谈】 文章目录 前言一、第一台计算机的诞生&#x1f4bb;二、计算机发展历史&#x1f4da;第一代计算机&#x1f4bb;第二代计算机&#x1f4bb;第三代计算机&#x1f4bb;第四代计算机&#x…

国产MCU-CW32F030开发学习-圆形GC9A01_LCD模块

国产MCU-CW32F030开发学习-圆形GC9A01_LCD模块 硬件平台 CW32_48F大学计划板CW32_IOT_EVA物联网开发评估套件1.28寸圆形彩色TFT显示屏高清IPS 模块240X240 SPI接口GC9A01 产品介绍 1.28寸圆形IPS彩屏&#xff0c;支持 RGB 65K色显示&#xff0c;显示色彩丰富240X240分辨率…