首页 > 其他分享 >canvas实现简单的粒子下落效果

canvas实现简单的粒子下落效果

时间:2023-03-13 23:13:52浏览次数:44  
标签:canvas const particle Canvas 粒子 下落 属性

 

1.创建 Canvas 元素,并获取其上下文

在实现粒子跳动动画的过程中,第一步需要创建一个 Canvas 元素,并获取其上下文。Canvas 元素是 HTML5 中的一个重要组件,它提供了一个可以通过 JavaScript 编写绘图代码的区域,可以用来实现各种各样的动画效果。获取 Canvas 上下文后,可以在其中绘制各种图形,并对它们进行操作,例如填充颜色、添加动画等等。因此,在实现任何 Canvas 动画之前,首先需要创建 Canvas 元素,并获取其上下文。
//获取Canvas元素并获取上下文
    const canvas = document.createElement('canvas');
    const ctx = canvas.getContext('2d');
    document.getElementById('app').appendChild(canvas)
    document.body.style.backgroundColor = "black";
 

2.设置 Canvas 元素的宽高

为了设置 Canvas 元素的宽高,需要在 HTML 代码中添加相应的属性。这些属性可以是 width 和 height,也可以是 style 属性。其中,width 和 height 属性可以指定 Canvas 元素的宽度和高度,而 style 属性可以使用 CSS 样式来定义元素的宽度和高度。为了确保 Canvas 元素在不同设备上显示的效果稳定,建议使用百分比来定义宽度和高度。
    //设置Canvas元素的宽高
    canvas.width = window.innerWidth
    canvas.height = window.innerHeight
 

3.创建一个粒子类,包含位置、速度、半径等属性,并实现绘制方法

我们需要先创建一个粒子类,该类应该包含位置、速度、半径等属性,并且我们可以根据需要添加更多的属性。在创建该类之后,我们需要实现其绘制方法。 为了实现更好的代码复用性和可维护性,我们可以将粒子类设计为可扩展的,例如,我们可以添加颜色、质量、生命周期等属性。此外,我们还可以实现一些其他的方法,例如更新位置、重置粒子状态等等。 如果我们正在开发一个粒子系统,我们可以使用该粒子类来创建和管理粒子。我们可以在屏幕上绘制多个粒子,每个粒子都有其自己的属性和状态。我们还可以通过修改粒子的属性来实现不同的效果,例如改变粒子的速度、半径等等。 总之,创建一个可扩展的粒子类可以为我们的代码提供更好的复用性和可维护性,并且可以为我们的项目带来更多的灵活性和创造性。
//创建一个粒子类,包含位置,速度,半径等属性,并实现绘制方法
    class Particle {
        constructor(x, y, radius, color) {
            //粒子的坐标
            this.x = x;
            this.y = y;
            //半径和颜色
            this.radius = radius;
            this.color = color;
            //粒子的下落速度
            this.speed = 4;
        }

        draw() {
            //绘制一个圆形粒子
            ctx.beginPath();
            ctx.arc(this.x, this.y, this.radius, 0, 2 * Math.PI)
            ctx.fillStyle = this.color
            ctx.fill()
            ctx.closePath()
        }
    }
 

4.创建粒子实例数组,并初始化

在创建粒子实例数组之前,需要确定粒子的类型和数量。可以通过定义粒子系统的属性来实现,例如粒子的大小、速度、颜色等。在初始化过程中,可以对每个粒子的属性进行设置,以确保它们在场景中的显示效果符合预期。此外,还可以添加粒子之间的相互作用,以增强场景的真实感和动态性。
//创建粒子实例数组并初始化
    const particles = []
    const particleCount = 200

    for (let i = 0; i < particleCount; i++) {
        //随机生成粒子的位置和大小,颜色
        const x = Math.random() * canvas.width
        const y = Math.random() * canvas.height
        const radius = Math.random() * 5 + 1
        const color = 'white'
        particles.push(new Particle(x, y, radius, color))
    }
 

5.实现粒子的动画效果

该段代码实现了粒子动画的主要逻辑。通过 requestAnimationFrame 方法实现动画的流畅性,每次调用 animate 函数都会清空画布,然后更新每个粒子的位置,绘制粒子。其中,粒子下落速度由 speed 属性决定,而粒子是否超出屏幕则是根据其位置和半径计算得出的。最终,我们调用 animate 函数开始绘制动画。

//实现粒子的动画效果
    function animate() {
        requestAnimationFrame(animate);
        ctx.clearRect(0, 0, canvas.width, canvas.height)

        particles.forEach(particle => {
            // 粒子下落速度
            particle.y += particle.speed;
            // 判断粒子是否超出屏幕
            if (particle.y > canvas.height + particle.radius) {
                particle.y = -particle.radius
            }
            //绘制粒子
            particle.draw();
        })
    }
    animate();

6.实现效果

   此文章借鉴了  https://juejin.cn/post/7209914417641783351

标签:canvas,const,particle,Canvas,粒子,下落,属性
From: https://www.cnblogs.com/happy-p/p/17213311.html

相关文章

  • 波和粒子
    为了要讨论‘物质波’、‘波粒二象性’等概念,先要说明什么是‘波’?什么是‘粒子’。在物理学上,粗略地说,波(或波动)是振动传播的现象。波在‘介质’中传播,例如,传播经典力学......
  • 视频直播源码,前端canvas动态验证码实现
    视频直播源码,前端canvas动态验证码实现  //生成一个随机数  constrandomNum=(min:number,max:number)=>{    returnMath.floor(Math.random()*......
  • 基于PSO粒子群优化的带时间窗VRPTW问题matlab仿真
    1.算法描述粒子群优化算法(PSO)是一种进化计算技术(evolutionarycomputation),1995年由Eberhart博士和kennedy博士提出,源于对鸟群捕食的行为研究。该算法最初是受到飞......
  • HTML5 Canvas 与 SVG 与 div
    动态创建元素并能够移动它们的最佳方法是什么?例如,假设我想创建一个矩形、圆形和多边形,然后选择这些对象并将它们四处移动。我知道HTML5提供了三个元素可以使这成为......
  • 【博学谷学习记录】超强总结,用心分享 | 小程序 canvas生成图片
    【博学谷IT技术支持】一、目标将画好的canvas生成一张图片,然后生成图片,保存在本地或者相册二、需求分析调研首先查看保存图片到本地,需要用户授权信息其次,canvas保存......
  • Canvas、客户端、表单
    Canvasvarcanvas=document.querySelector('.myCanvas');varwidth=canvas.width=window.innerWidth;varheight=canvas.height=window.innerHeight;滚动条......
  • 直播平台搭建源码,canvas 画一条波浪线 进度条
    直播平台搭建源码,canvas画一条波浪线进度条<template> <view>  <canvas:style="{'width':width+'rpx','height':height +'rpx','backgroundColor':'#d2d......
  • vue前端实现将页面显示内容生成pdf文件的几种方法,html2canvas、dom-to-image、jspdf(带
    实际开发需求:vue项目中,根据数据结构生成echarts图表组件,生成带有样式的图表以后,点击下载按钮,把图表以pdf格式的文件下载到本地实现思路:将vue界面的echarts组件生成图片,然......
  • Canvas画布
    之前Web上的动画都是使用Flash实现的。比如动画,广告,游戏等等,基本上都是Flash实现的。Flash是有缺点的,需要安装AdobeFlashPlayer,漏洞多,重量大,卡顿不流程等。 Html5提......
  • 利用canvas实现钟表效果
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>钟表效果</title><style>body{background:black;}#c1{background:white......