javascript实现粒子特效(包含注释)

【前端】particle.js页面粒子效果 一、效果 二、使用 GitHub地址:https://github.com/VincentGarreau/particles.js html中引入: <div id="particles-js"></div> <script src="particles.js"></script> <script src="app.js"></script> 踩坑注意: <div id="particles-js"></div& 阅读详情
  // 获取Canvas元素和上下文
  const canvas = document.getElementById('particleCanvas');
  const ctx = canvas.getContext('2d');

  // 设置Canvas尺寸
  canvas.width = window.innerWidth;
  canvas.height = window.innerHeight;

  // 粒子数组
  let particles = [];
  const MAX_LEN = 200;

  function limitParticlesInView(maxParticles) {
    const particlesInView = particles.filter((particle) => {
      return particle.x > 0 && particle.x < canvas.width && particle.y > 0 && particle.y < canvas.height;
    });

    if (particlesInView.length > maxParticles) {
      // 超过限制时删除多余的粒子
      particles.splice(maxParticles, particlesInView.length - maxParticles);
    }
  }

  // 创建粒子类
  class Particle {
    constructor(x, y, radius, color, speedX, speedY) {
      this.x = x;
      this.y = y;
      this.radius = radius;
      this.color = color;
      this.speedX = speedX;
      this.speedY = speedY;
    }

    draw() {
      ctx.beginPath();
      ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2);
      ctx.closePath();
      ctx.fillStyle = this.color;
      ctx.fill();
    }

    update() {
      this.x += this.speedX;
      this.y += this.speedY;
    }
  }

  // 生成随机整数
  function randomIntFromRange(min, max) {
    return Math.floor(Math.random() * (max - min + 1) + min);
  }

  // 生成随机颜色
  function randomColor(colors) {
    return colors[Math.floor(Math.random() * colors.length)];
  }

  // 初始化粒子数组
  function init() {
    for (let i = 0; i < 100; i++) {
      const radius = randomIntFromRange(1, 5);
      const x = randomIntFromRange(radius, canvas.width - radius);
      const y = randomIntFromRange(radius, canvas.height - radius);
      const color = randomColor(['#f44336', '#3f51b5', '#4caf50', '#ffeb3b', '#ff5722']);
      const speedX = (Math.random() - 0.5) * 2; // 随机速度在[-1, 1]之间
      const speedY = (Math.random() - 0.5) * 2;
      particles.push(new Particle(x, y, radius, color, speedX, speedY));
    }
  }

  // 动画循环
  function animate() {
    requestAnimationFrame(animate);
    ctx.clearRect(0, 0, canvas.width, canvas.height);

    particles.forEach((particle) => {
      particle.update();
      particle.draw();
    });

    limitParticlesInView(MAX_LEN);
  }

  // 鼠标点击时,在点击位置生成特殊粒子效果
  canvas.addEventListener('click', (event) => {
    const x = event.clientX;
    const y = event.clientY;
    for (let i = 0; i < 10; i++) {
      const radius = randomIntFromRange(3, 6);
      const color = randomColor(['#f44336', '#3f51b5', '#4caf50', '#ffeb3b', '#ff5722']);
      const speedX = (Math.random() - 0.5) * 4; // 随机速度在[-2, 2]之间
      const speedY = (Math.random() - 0.5) * 4;
      particles.push(new Particle(x, y, radius, color, speedX, speedY));
    }
  });

  // 初始化并启动动画
  init();
  animate();

  // 监听窗口大小变化事件,重新设置Canvas尺寸
  window.addEventListener('resize', () => {
    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight;
    init(); // 调整窗口大小时重新初始化粒子数组
  });

 <canvas id="particleCanvas"></canvas>
canvas {
    display: block;
    position: absolute;
    top: 0;
    left: 0;
}
分享three.js实现粒子背景 粒子特效可以实现非常多的效果,如星空、烟雾、雨、灰尘、火等。粒子特效的优势是即使使用了成百上千的例子,也能保证比较高的帧率。缺点是每个粒子都由一个始终面向相机的平面(两个三角形)组成。 阅读详情

相关推荐

particles.js粒子特效(常用登录页背景)

particles.js开源地址:GitHub - VincentGarreau/particles.js: A lightweight JavaScript library for creating particles 4、DOM 如果页面没有显示效果,请检查canvas和父层div的高度是否有高度。对应第2点的开源地址的详细文档阅读

weixin_39921970的博客 2653

原生js实现canvas粒子特效

要实现的效果 当鼠标移入容器时,让鼠标作为中心点半径为80到圆内的粒子散开 当粒子不在圆的范围后,粒子返回原来的位置 主要代码 创建初始位置 // NUM_PARTICLES是粒子总个数 for ( i = 0; i < NUM_COUNT; i++ ) { p = { vx: 0, vy: 0, x: 0, y: 0, ox: 0, oy: 0 }; // 点的当前...

weixin_41218855的博客 2034

如何做一个简单漂亮的粒子抖动特效登录页

一、实现效果: 首先分析这个页面用到了背景粒子效果,登录窗口的抖动,以及按钮的圆圈动效。粒子效果以及抖动效果都有脚本插件。 二、源码地址: 粒子插件:https://github.com/VincentGarreau/particles.js 抖动插件:https://github.com/NiklasKnaack/jquery-wobblewindow-plugin 三、代码实现: html部分: <!DOCTYPE html> <html> <head>

fujijiajia923的博客 1571

漩涡粒子

相必各位同学们看过许多酷炫的用JS实现的3D漩涡吧,下面我为大家安利一下源码:+&lt;!doctype html&gt; +&lt;html&gt; +&lt;head&gt; +&lt;meta charset="utf-8"&gt; +&lt;title&gt;漩涡粒子&lt;/title&gt; + +&lt;style&gt; +html,body{

金州饿霸吃不饱的博客 5713

几十行js实现很炫的canvas交互特效

几十行js实现很炫的canvas交互特效 废话不多说,先上效果图! 本篇文章的示例代码都是抄的一个叫Franks的老外在yutube上的一个教学视频,他还出了很多关于canvas的视频,十分值得学习,而我对canvas也不太熟悉,跟着大神一起敲代码,做个学习笔记,还要说一下,本文示例的页面结构很简单(html只包含一个canvas),后面代码部分就不贴了,毕竟js才是主角。 1.画圆 首先从画...

福禄网络研发团队的博客 900

vue粒子特效插件——vue-particles

效果: 参考官网:https://vue-particles.netlify.app/ 1、 安装vue-particles插件 npm install vue-particles --save-dev 2、在main.js引入插件 import Vue from 'vue' import VueParticles from 'vue-particles' Vue.use(VueParticles) 3、使用插件 <template> <div id="app">

qq_43151592的博客 2334

网页粒子特效背景 Particleground.js 的简单引入

一、前言一个简单的网页,布局、样式、交互 等都做得不错了,接下来就该来点网页背景特效了 1、Particleground.js 相关介绍与下载应用 Ⅰ、官方演示站点:http://www.jq22.com/yanshi566 Ⅱ、demo下载链接:https://github.com/jnicol/particleground/archive/master.zip Ⅲ、git方式 下

IT小村 2万+

别再用Three.js从零写粒子特效了!用Gemini 3的Build界面,5分钟搞定手势交互3D应用

本文介绍了如何利用Gemini 3的Build界面快速实现手势交互3D应用,告别传统Three.js繁琐开发流程。通过自然语言描述需求,5分钟即可生成可运行的3D粒子特效代码,大幅提升开发效率。重点演示了手势控制、3D粒子系统的实现技巧和二次开发策略,适合需要快速原型开发的创作者和技术团队。

weixin_30776273的博客 299

vue 3 + mo.js 实现点赞粒子特效【实战】

最终效果 为方便大家下载,开源gitee地址如下 点赞粒子效果 (gitee.com) 文章较长,建议一步一步跟着走 创建一个项目 首先我们创建一个vue3.2项目 详情请见Vue3+TypeScript 项目创建_qq_22841387的博客-优快云博客,这里就不赘述了 这里选择默认即可 一、显示页面 1.新建页面 在components文件夹下新建页面ThumbsUp.vue 单文件组件遵循 大驼峰原则 2.写部分显示代码 <template> <h1>.

qq_22841387的博客 4574

原生JS实现飘沙特效与粒子烟雾混合渲染

飘沙特效和粒子烟雾是现代网页中提升视觉表现力的关键动效技术,其本质属于基于物理模型的Canvas粒子系统。飘沙侧重重力加速度与碰撞阻尼模拟,烟雾则依赖流体扩散与涡旋扰动,二者混合需差异化运动方程设计。通过原生Canvas 2D API构建轻量级粒子引擎,可规避p5.js等框架带来的主线程阻塞与兼容性风险,在弱网、iOS Safari及低端安卓设备上保障60fps稳定渲染。该方案支持GPU加速合成、对象池内存优化、动态帧率保护及jQuery共存集成,适用于电商详情页、品牌官网等对首屏性能与跨端一致性要求严苛的

weixin_29009669的博客 195

Three.js火焰特效实战:从粒子系统到着色器编程的完整实现

粒子系统是计算机图形学中模拟群体行为(如火焰、烟雾、水流)的核心技术,它通过大量简单元素的集合来表现复杂的自然现象。其基本原理是将每个粒子视为具有位置、速度、生命周期等属性的独立实体,通过物理规则(如力、湍流)驱动其运动,并在GPU上利用着色器进行高效渲染。这项技术的价值在于能以较低的计算成本,在网页端实现逼真的动态视觉效果,广泛应用于游戏特效、数据可视化和交互式媒体领域。本文以火焰模拟为例,深入剖析了如何结合Three.js粒子系统与自定义着色器,通过顶点着色器实现湍流位移和生命周期管理,在片元着色器中运

weixin_29296241的博客 219

前端样式实践:鼠标驱动的爱心粒子效果

使用vue3+canvas实现跟随鼠标的粒子爱心样式。

猫晨的技术小屋 1266

告别臃肿!保姆级教程:用NTLite深度精简Win10,打造你的专属纯净系统(附完整组件移除清单)

本文提供了一份详细的NTLite教程,帮助用户深度精简Windows10系统,移除冗余组件并优化性能。从准备工作到组件移除清单,再到系统配置优化和无人值守安装,逐步指导用户打造专属纯净系统。附完整组件移除清单和实战经验,确保系统稳定高效运行。

weixin_30945039的博客 855

国庆主题可视化网页开发|原生CSS+JS实现粒子烟花特效(附完整源码)

本次升级优化了核心视觉效果,新增点击烟花爆炸、自动全屏烟花、背景古风音乐、动态粒子飘落、卡片悬浮交互、深浅视觉层次等功能,同时完美适配 PC、平板、手机所有设备。本项目兼顾观赏性与技术性,涵盖前端动画开发、DOM动态操作、性能优化、响应式布局、GPU硬件加速等核心知识点,非常适合前端新手实战练手、课程设计、节日项目开发,也可直接部署用于个人主页、节日宣传、博客装饰等场景。核心实现功能:金色粒子飘落动画、全屏烟花特效、点击交互烟花、毛玻璃悬浮卡片、渐变高级配色、自适应布局、背景音乐自动播放、DOM性能优化。

2501_93244337的博客 164

comfyui利用 SkyReels-V2直接生成长视频本地部署问题总结 2 :寻找丢失的model 和工作流中 get set 方法的应用

寻找丢失的model 和工作流中 get set 方法的应用,为什么有写工作流 中有很多断掉的节点,没有相互链接?

AI懒虫 1790

Lossless-Claw 插件实战:告别上下文截断,让 OpenClaw 永不遗忘

本文介绍了OpenClaw的Lossless-Claw插件,这是一个基于LCM论文的DAG摘要系统,能有效解决上下文截断问题。文章包含10个部分,从插件原理到实操指南: 核心原理:通过DAG结构持久化存储所有原始消息,将旧消息分块摘要并形成层级结构,保持上下文在模型Token限制内。 性能优势:在OOLONG基准测试中得分74.8,优于Claude Code的70.3,尤其在长上下文场景表现更佳。 功能特点: 提供lcm_grep、lcm_describe等工具主动回忆历史 摘要始终链接回原文,实现真正无损

u014798858的博客 2617

从“特效差不多”到上线达标:Canvas粒子特效性能优化与落地指南

在Web前端开发中,动画特效常被视为提升交互体验的重要元素,但一个能运行的Demo并不等于能上线的功能。理解浏览器渲染机制与动画驱动原理,是走向工程化的第一步。requestAnimationFrame作为与屏幕刷新率同步的调度器,相比setInterval能有效减少掉帧与资源浪费,是高性能动效的基础。而Canvas技术则凭借灵活的像素级绘制能力,成为实现高密度粒子系统的首选方案。在实际业务场景中,无论是H5活动页、可视化大屏还是小程序动效,都需要在视觉表现与性能预算之间取得平衡。通过限制粒子数量、运用对象

weixin_34205826的博客 455

组态王通过以太网与西门子S7-200 SMART PLC通讯案例详解

通过以上步骤,我们成功实现了组态王与西门子S7-200 SMART PLC的以太网通讯。这一技术不仅提高了工业自动化系统的灵活性和可靠性,还为初学者提供了一个实用的学习案例。希望本文能帮助您快速掌握组态王与西门子S7-200 SMART PLC的通讯技术。如有任何疑问,欢迎留言讨论!

2401_88785500的博客 2004

使用Pixi.js 画一颗闪耀的心心(粒子图片特效,以及拓展)

以上效果可以通过替换图片形成不同的粒子图片,可以通过配置参数,达到不同的展示效果。:利用图片的像素信息,遍历图片的所有像素点,在自定义的规则下,满足条件的像素点位置画出小五角星,每一帧去刷新小五角星的属性,位置,大小,透明度等等。可以看出,会根据图片的位置信息和像素信息创建出一组粒子,分布在一个半径为屏幕宽度一半的圆上.结合上面update的代码可以不停更新粒子的位置等属性。可以看出,有两部分粒子的初始化,一种是随机飞的粒子,一种是图片形状粒子,先看随机粒子的代码部分,由于很简单,不做分析.

ufrontend的博客 1007

在ZYNQMP上点亮800x480 LCD屏:从framebuffer到DRM框架的完整驱动移植实战

本文详细介绍了在ZYNQMP平台上点亮800x480 LCD屏的完整驱动移植实战,从framebuffer到DRM框架的技术实现。内容涵盖硬件配置、设备树设置、显示时序参数调试以及DRM驱动核心实现,帮助开发者快速掌握PetaLinux系统中的LCD驱动开发技巧。

weixin_33701294的博客 427

极智芯 | 解读国产CPU之海光

大家好,我是极智视界,本文分享一下 解读国产CPU之海光。希望我的分享能对你的学习有一点帮助。

极智视界 3318

cesium 喷涂特效(粒子效果)

但是官方注释不够友好,下面是我自己封装的一个粒子特效的类。

weixin_43812586的博客 182

单片机:实现简单的时间片轮询调度(附完整源码)

单片机:实现简单的时间片轮询调度(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 384

AI编程助手CodeBuddy实战:快速生成Phaser粒子特效

粒子系统是游戏开发中实现视觉特效的核心技术,它通过模拟大量微小粒子的运动来呈现火焰、爆炸、魔法等动态效果。其原理基于对粒子生命周期、速度、大小、颜色等属性的程序化控制。这项技术的价值在于能以较低的性能开销创造出丰富的视觉表现,极大增强游戏的沉浸感和反馈感。在HTML5游戏开发领域,Phaser框架内置了强大的ParticleEmitter模块,但其复杂的参数配置常令开发者,尤其是初学者望而生畏。此时,AI编程助手通过自然语言理解与代码生成能力,能有效降低使用门槛。例如,开发者只需描述“创建红色爆炸效果”,A

weixin_30832405的博客 427

Qt应用软件【协议篇】自定义协议处理串口半包贴包

Qt串口数据,半包,贴包,丢包数据处理

小鱼酱的博客 1211

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Vue3实战笔记(35)—集成炫酷的粒子特效

学习一个有趣炫酷的玩意开心一下。tsparticles,可以方便的实现各种粒子特效。支持的语言框架也是相当的丰富.官网:https://particles.js.org/只是按照官网的示例运行成功了,还有很多很多其他炫酷的示例没有测试,后续还会继续研究一番。不要因为结束而哭泣,微笑吧,为你的曾经拥有。

山花的博客 1409

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: node.js小知识-对文件中图片归类
下一篇: rollup/wepack/vite傻傻分不清
前端答疑解惑
博客等级 码龄4年 2粉丝 16原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值