【前端react 粒子特效】

前言

最近写项目的时候,登录页面需要添加粒子特效。

了解了一下发现比较常用的插件库应该就是particle了,

这个是particles,但是目前已被弃用

npm i react-particles-js

取代它的是tsparticles

npm i react-tsparticles

这个粒子插件让没有了解过的它人(比如我)使用起来异常的难受,主要是因为里面的参数不知道有什么用的。

我在使用它的过程中,实现粒子效果花了几分钟,毕竟人家的readme里面就有写了例子,然后花了大概两小时去找它里面的参数的作用(包括找文章、翻官网等),我没想到的是连官网自己都不写参数的作用,离大谱。
后来就是自己一个一个地试着修改。。。。。
先安装两个插件,会用到的
npm install react-tsparticles
npm install tsparticles
以下是用法

//引入
import Particles from 'react-tsparticles'
import { loadFull } from "tsparticles";
//组件的最外层

    const particlesInit = async (main) => {
        await loadFull(main);
    };

    //粒子被正确加载到画布中时,这个函数被调用
    const particlesLoaded = (container) => {
        console.log("123", container);
    };
//在你的代码中写入
//options是粒子参数
<Particles
     id="tsparticles"
     init={particlesInit}
     loaded={particlesLoaded}
     options={options}
 />
//粒子参数
    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
                }
            }
        }
    }

最终效果:
在这里插入图片描述

另外一个插件库则是canvas-nest

npm i react-canvas-nest

使用方法是

先引入

import ReactCanvasNest from 'react-canvas-nest'
	<ReactCanvasNest
	    className='canvasNest'
        config={{
	        pointColor: ' 255, 255, 255 ',
	        lineColor: '255,255,255',
	        pointOpacity: 0.5,
	        pointR: 2,
	        count:100
    	}}
        style={{ zIndex: 1 }}
    />

config参数配置

参数描述默认
count粒子数量88
pointR粒子的半径(即粒子的大小)1
pointColor粒子颜色114,114,114
pointOpacity粒子的透明度(0~1)1
dist两点之间的最大距离6000
line点与点之间的线的颜色0,0,0
lineWidth线的宽度1
follow是否跟随鼠标true
mouseDist点与鼠标之间的距离20000

最终效果是:
在这里插入图片描述

结果

优点

tsparticles
它的优点很多,不如它可以通过不同的参数来配置显示出来的不同粒子效果,简单一点的有:粒子形状、点击页面分裂粒子、鼠标箭头排斥粒子等。
只要你会用,你就能玩出不同的骚操作

canvas-nest
没有复杂的参数配置,效果显示简洁

缺点

tsparticles
它的缺点也很明显,就是参数太多了,过于复杂,没有API的说明(至少我没找到)
还有一点就是使用官网的readme文档中的例子,页面经过长时间运行后,你会发现粒子貌似会无限加速,慢慢的你会听到你的风扇在咆哮,
建议用的时候去找官网demos中的例子https://particles.js.org/

canvas-nest
单一的点和线,粒子数量不能弄太多,容易卡(conut设置到200后,能看到页面粒子卡到飞起)。

tsparticlescanvas-nest之间,我现在选择的是canvas-nest
毕竟我现在只要简单的粒子效果就行了

  • 13
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
前端React TypeScript是使用TypeScript语言编写React应用程序的一种方式。TypeScript是JavaScript的超集,它为JavaScript添加了静态类型检查和其他一些功能,如接口和泛型。 在React TypeScript中,可以使用类型声明来定义组件的属性类型和状态类型。可以使用泛型来定义可复用的组件,以及使用React提供的类型来处理表单事件。 引用和引用提供了一些常用的React TypeScript类型声明示例。在这些示例中,可以看到如何定义组件的属性类型,包括支持数组、字符串和函数作为子元素的方式。还可以看到如何定义接受样式对象和表单事件的属性。 在引用中,展示了两种定义onChange事件处理函数的方式。第一种使用自定义的changeFn类型来定义参数和返回值类型,这样可以更具体地指定事件的类型。第二种使用React提供的ChangeEventHandler类型来定义参数类型,这是一种更通用的方式。 总结来说,前端React TypeScript提供了更强的类型检查和类型提示,可以帮助开发者更早地发现和解决潜在的错误。通过使用类型声明和泛型,可以编写更具可复用性和可维护性的代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [还算完整的React+TS类型](https://blog.csdn.net/imber___zsk/article/details/121580559)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值