JavaScript 实现

这是 JavaScript 动画的核心部分。我们将定义粒子的配置并设置画布来绘制它们。

\\'use strict\\'; // Enables strict mode to enforce stricter parsing and error handling in JavaScript// Configuration object for particle systemconst config = {    particleCount: 100,                  // Total number of particles in the system    particlePropCount: 9,                // Number of properties each particle has    baseTTL: 1,                          // Base time-to-live for each particle (in seconds)    rangeTTL: 2,                         // Range of time-to-live variation (in seconds)    baseSpeed: 0.001,                    // Base speed of particle movement    rangeSpeed: 0.002,                   // Variation in particle speed    circularSpeed: 0.001,                // Speed of particles\\' circular motion    baseRadius: 2,                       // Minimum radius of particles    rangeRadius: 3,                      // Maximum variation in particle radius    baseHue: 220,                        // Base hue (color) of particles    rangeHue: 120,                       // Variation in hue for particle colors    backgroundColor: \\'#111827\\',          // Color of the background    circleRadius: 250,                   // Radius of the circular area in which particles move    glowStrength: 10,                    // Strength of the glow effect around particles    randomnessFactor: 4,                 // Factor to introduce randomness in particle behavior    trailLength: 10.2,                   // Length of the trail left by particles    mouseForce: 2,                       // Increased mouse attraction force to pull particles    mouseRadius: 200                      // Radius within which mouse influence affects particles};// Additional JavaScript code goes here...

在上面的代码中,我们为粒子配置了各种属性,包括它们的数量、速度、半径、颜色(色调)和画布的背景颜色。

初始化粒子

我们以圆形图案初始化粒子并为它们分配随机属性:

function initParticles() {    particleProps = new Float32Array(config.particleCount * config.particlePropCount);    const angleIncrement = TAU / config.particleCount;    for (let i = 0; i < config.particleCount; i  ) {        initParticle(i * config.particlePropCount, i * angleIncrement);    }}function initParticle(i, angleOffset) {    const radius = config.baseRadius   rand(config.rangeRadius);    const hue = config.baseHue   rand(config.rangeHue);    particleProps.set([        Math.cos(angleOffset) * config.circleRadius   canvas.a.width / 2,        Math.sin(angleOffset) * config.circleRadius   canvas.a.height / 2,        0, 0, 0,        config.baseTTL   rand(config.rangeTTL),        config.baseSpeed   rand(config.rangeSpeed),        radius, hue    ], i);}

绘制粒子

核心动画逻辑在绘制函数中处理,我们在其中不断更新和渲染粒子:

function draw() {    tick  ;    ctx.a.clearRect(0, 0, canvas.a.width, canvas.a.height);    ctx.b.fillStyle = config.backgroundColor;    ctx.b.fillRect(0, 0, canvas.a.width, canvas.a.height);    drawParticles();    renderGlow();    renderToScreen();    requestAnimationFrame(draw);}

CSS 样式

为了确保我们的动画看起来优美,我们将使用一些 CSS 来设计主体和画布的样式:

body {    display: flex;    justify-content: center;    align-items: center;    height: 100vh; /* Full viewport height */    margin: 0;    background: #000; /* Optional: background color */}.content--canvas {    position: absolute;     top: 0;    z-index: 1;    width: 100vw; /* Full viewport width */    height: 100vh; /* Full viewport height */}canvas {    display: block; }

随意尝试配置对象中的粒子属性来创建您独特的动画!查看 CodePen 上的现场演示,并在下面的评论中分享您的想法或改进。

","image":"http://www.luping.net/uploads/20241006/17282059316702546b4a6a4.jpg","datePublished":"2024-11-08T19:41:54+08:00","dateModified":"2024-11-08T19:41:54+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 使用 JavaScript 创建令人着迷的粒子动画

使用 JavaScript 创建令人着迷的粒子动画

发布于2024-11-08
浏览:806

Creating a Mesmerizing Particle Animation with JavaScript

这就是我们要创建的,将鼠标移到粒子上即可查看效果。

在本文中,我将引导您完成使用 JavaScript 和 HTML5 画布创建迷人粒子动画的过程。该项目不仅增强了网页的美观性,而且还是深入研究一些有趣的编码概念的绝佳机会。让我们开始吧!

项目概况

动画的特点是粒子围绕中心点以圆形图案移动。当鼠标悬停在画布上时,粒子会被吸引到光标上,从而创建动态且引人入胜的效果。我们将利用 Simplex Noise 库引入一些随机性,并使粒子的运动更加有机且更具视觉吸引力。

使用的技术

  • HTML5 Canvas:用于渲染动画。
  • JavaScript:用于管理动画逻辑。
  • CSS:用于样式和布局。
  • Simplex Noise:为粒子运动添加随机性。

设置环境

首先,创建一个 HTML 文件并使用以下脚本标记包含 Simplex Noise 库:


JavaScript 实现

这是 JavaScript 动画的核心部分。我们将定义粒子的配置并设置画布来绘制它们。

'use strict'; // Enables strict mode to enforce stricter parsing and error handling in JavaScript

// Configuration object for particle system
const config = {
    particleCount: 100,                  // Total number of particles in the system
    particlePropCount: 9,                // Number of properties each particle has
    baseTTL: 1,                          // Base time-to-live for each particle (in seconds)
    rangeTTL: 2,                         // Range of time-to-live variation (in seconds)
    baseSpeed: 0.001,                    // Base speed of particle movement
    rangeSpeed: 0.002,                   // Variation in particle speed
    circularSpeed: 0.001,                // Speed of particles' circular motion
    baseRadius: 2,                       // Minimum radius of particles
    rangeRadius: 3,                      // Maximum variation in particle radius
    baseHue: 220,                        // Base hue (color) of particles
    rangeHue: 120,                       // Variation in hue for particle colors
    backgroundColor: '#111827',          // Color of the background
    circleRadius: 250,                   // Radius of the circular area in which particles move
    glowStrength: 10,                    // Strength of the glow effect around particles
    randomnessFactor: 4,                 // Factor to introduce randomness in particle behavior
    trailLength: 10.2,                   // Length of the trail left by particles
    mouseForce: 2,                       // Increased mouse attraction force to pull particles
    mouseRadius: 200                      // Radius within which mouse influence affects particles
};

// Additional JavaScript code goes here...

在上面的代码中,我们为粒子配置了各种属性,包括它们的数量、速度、半径、颜色(色调)和画布的背景颜色。

初始化粒子

我们以圆形图案初始化粒子并为它们分配随机属性:

function initParticles() {
    particleProps = new Float32Array(config.particleCount * config.particlePropCount);
    const angleIncrement = TAU / config.particleCount;

    for (let i = 0; i 



绘制粒子

核心动画逻辑在绘制函数中处理,我们在其中不断更新和渲染粒子:

function draw() {
    tick  ;
    ctx.a.clearRect(0, 0, canvas.a.width, canvas.a.height);
    ctx.b.fillStyle = config.backgroundColor;
    ctx.b.fillRect(0, 0, canvas.a.width, canvas.a.height);

    drawParticles();
    renderGlow();
    renderToScreen();
    requestAnimationFrame(draw);
}



CSS 样式

为了确保我们的动画看起来优美,我们将使用一些 CSS 来设计主体和画布的样式:

body {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh; /* Full viewport height */
    margin: 0;
    background: #000; /* Optional: background color */
}

.content--canvas {
    position: absolute; 
    top: 0;
    z-index: 1;
    width: 100vw; /* Full viewport width */
    height: 100vh; /* Full viewport height */
}

canvas {
    display: block; 
}

随意尝试配置对象中的粒子属性来创建您独特的动画!查看 CodePen 上的现场演示,并在下面的评论中分享您的想法或改进。

版本声明 本文转载于:https://dev.to/sohrabzia/creating-a-mesmerizing-particle-animation-with-javascript-e35?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 在Java中如何将字符数组转换为字符串?
    在Java中如何将字符数组转换为字符串?
    将 Char 数组转换为 String在 Java 中,可以使用 String 构造函数将 char 数组转换回字符串。以下代码说明了如何执行此转换:char[] a = {'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'}; String ...
    编程 发布于2024-11-08
  • 数据工程终极指南。
    数据工程终极指南。
    数据工程是设计和构建用于大规模收集、存储和分析数据的系统的实践。这是一个广泛的领域,几乎在每个行业都有应用。本文旨在提供有关如何成为一名数据工程师的分步指南。 大多数数据工程师都拥有计算机科学或相关领域的学士学位背景,教授云计算、编码技能和数据库设计等基础知识。 要成为一名数据工程师,首先应该专注于...
    编程 发布于2024-11-08
  • 如何在 React 中使用广播通道 API
    如何在 React 中使用广播通道 API
    在当今的 Web 应用程序中,跨多个选项卡或窗口保持信息更新可以极大地增强用户体验。例如,如果用户在一个选项卡中注销,您希望该操作反映在所有其他选项卡中。 广播通道 API 通过允许同一来源的不同浏览上下文之间进行通信,使这一过程变得简单。本文将指导您如何在 React 应用程序中使用此 API。 ...
    编程 发布于2024-11-08
  • Pandas 中的链式分配有效吗?
    Pandas 中的链式分配有效吗?
    Pandas 中的链式赋值简介Pandas(流行的数据操作库)中的链式赋值是对数据框的值连续执行的操作。如果操作处理不当,可能会导致性能问题。链式分配警告Pandas 发出SettingWithCopy 警告以指示链式分配中潜在的低效率问题。这些警告提醒用户分配可能不会按预期更新原始数据框。副本和引...
    编程 发布于2024-11-08
  • JavaScript Promise:您需要了解的基础知识
    JavaScript Promise:您需要了解的基础知识
    介绍 JavaScript 是一种单线程编程语言,这意味着它一次只能运行一个任务。对于诸如获取数据或设置计时器之类的异步操作来说,这变得很棘手,这可能会阻止执行流程并减慢应用程序的速度。 为了在不冻结线程的情况下处理这些异步任务,我们遇到了Promise——一个简化异步编程的强大工...
    编程 发布于2024-11-08
  • 如何将 AngularJS ng-repeat 数据对齐到三个 Bootstrap 列中?
    如何将 AngularJS ng-repeat 数据对齐到三个 Bootstrap 列中?
    在三个引导列中对齐 AngularJS ng-repeat 数据AngularJS 提供 ng-repeat 来基于数据数组动态创建元素。当您处理大量元素时,将它们对齐到列中可以增强用户界面和可读性。基于控制器的转换首选方法是在控制器使用 JavaScript 的 chunk 函数,将数据分成大小均...
    编程 发布于2024-11-08
  • 如何在 Cypress 中验证上传和下载
    如何在 Cypress 中验证上传和下载
    介绍 处理文件上传和下载是端到端测试中的常见场景。在这篇文章中,我们将探讨如何使用 Cypress 处理文件上传和下载。尽管 Cypress 缺乏对这些操作的内置支持,但您可以通过利用一些库和 Cypress 强大的命令集来实现此功能。 读完本指南后,您将了解如何: 使用 Cypr...
    编程 发布于2024-11-08
  • 节流与去抖:何时使用哪种速率限制技术?
    节流与去抖:何时使用哪种速率限制技术?
    区分速率限制函数的节流和去抖在软件开发领域,管理函数调用的频率对于优化至关重要性能并防止不必要的资源消耗。节流和去抖是用于速率限制功能的两种流行技术,但理解它们的细微差别可能会令人困惑。为了简化它们的区别,请考虑以下类比:节流:想象一下你有一根不断喷水的软管。节流通过调节软管的开口或流量来限制水流的...
    编程 发布于2024-11-08
  • 如何使用免费词典API
    如何使用免费词典API
    封面照片由 Christopher Gower 在 Unsplash 上拍摄 您是否正在开发语言学习应用程序、写作助手或任何涉及单词并需要 API 来检索单词含义的项目?免费词典 API 提供了一种免费且易于访问的方式,将语言数据合并到您的作品中。本文档将向您展示如何开始。 在此 ...
    编程 发布于2024-11-08
  • 当条件涉及字符串字段的非零值时,为什么 MySQL 查询会返回所有行?
    当条件涉及字符串字段的非零值时,为什么 MySQL 查询会返回所有行?
    MySQL查询返回字段值非零的所有行:分析与解决方案当查询MySQL表时,条件如“ email=0”,其中电子邮件字段仅包含非零值,因此无法收到所有返回的行。此行为可能会损害数据完整性并带来潜在的安全风险。要了解发生这种情况的原因,请务必注意 MySQL 在比较过程中以不同方式处理数据类型。当将字符...
    编程 发布于2024-11-08
  • 在服务器上使用 Matplotlib 时如何解决“_tkinter.TclError:无显示名称且无 $DISPLAY 环境变量”错误?
    在服务器上使用 Matplotlib 时如何解决“_tkinter.TclError:无显示名称且无 $DISPLAY 环境变量”错误?
    解决“_tkinter.TclError:没有显示名称和没有 $DISPLAY 环境变量”错误在服务器上执行涉及 Matplotlib 的 Python 脚本时,您可能会遇到错误“_tkinter.TclError:没有显示名称,也没有 $DISPLAY 环境变量。”出现这个错误是因为Matplot...
    编程 发布于2024-11-08
  • Cypress Web 测试深入指南
    Cypress Web 测试深入指南
    在 Web 开发领域,测试是确保 Web 应用程序的可靠性、性能和用户体验的关键步骤。随着应用程序变得越来越复杂,对有效、高效且易于使用的测试工具的需求变得更加明显。这就是现代端到端测试框架 Cypress 的闪光点。在本文中,我们将探讨什么是 Cypress Web 测试、为什么它在其他测试工具...
    编程 发布于2024-11-08
  • 如何在 PHP 中实现立即调用函数表达式 (IIFE)?
    如何在 PHP 中实现立即调用函数表达式 (IIFE)?
    PHP 的立即函数调用在 PHP 中,立即调用函数表达式 (IIFE) 在 PHP 7 中具有部分等价性,因为您可以在函数执行完后立即调用该函数。定义。但是,PHP 5.x 不支持此功能。对于 PHP 7,示例如下:(function() { echo "yes, this works i...
    编程 发布于2024-11-08
  • 如何在 JavaScript 中将字符串编码和解码为 Base64?
    如何在 JavaScript 中将字符串编码和解码为 Base64?
    在 JavaScript 中将字符串编码和解码为 Base64处理二进制数据时,通常需要将其编码为更方便的格式字符串表示。 Base64 是一种流行的编码方案,它将二进制数据表示为一串可打印字符。这使得在 Web 应用程序和其他场景中传输和存储数据变得更加容易。在 JavaScript 中将字符串编...
    编程 发布于2024-11-08
  • 为什么加载“GeoIP.dat”时 `Class.getResource()` 返回 Null 以及如何修复它?
    为什么加载“GeoIP.dat”时 `Class.getResource()` 返回 Null 以及如何修复它?
    URL资源加载失败:Class.getResource返回Null尝试使用getResource()方法检索资源的URL时,一些用户遇到该方法返回 null 的问题。当尝试加载“GeoIP.dat”文件时,会特别出现此问题。这里更深入地探讨了潜在原因和加载资源的替代方法。可能的原因getResour...
    编程 发布于2024-11-08

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3