美文网首页让前端飞Web前端之路
Canvas粒子效果,让我们复习一下基本操作

Canvas粒子效果,让我们复习一下基本操作

作者: 聪明的汤姆 | 来源:发表于2018-05-23 16:24 被阅读23次
效果图
dot.gif
代码

dot.js

/*
 * @Author: likang xie 
 * @Date: 2018-05-23 16:01:21 
 * @Purpose: Dot粒子类
 */

class Dot {

  constructor(x, y, vx, vy) {
    this.x = x; // x坐标
    this.y = y; // y坐标
    this.vx = vx; // x速度
    this.vy = vy; // y速度
    this.size = Math.ceil(Math.random() * 2); // 随机大小
    this.speed = 1; // 整体定时器的帧率,越大越快
  }
  
  // 初始化粒子
  render() {
    ctx.save();
    ctx = ctx;
    ctx.beginPath();
    ctx.fillStyle = 'lightgray';
    ctx.arc(this.x - this.size / 2, this.y - this.size / 2, this.size, 0, Math.PI * 2);
    ctx.closePath();
    ctx.fill();
    ctx.restore();
  }
  
  // 更新粒子(坐标位置)
  update() {
    this.x = this.x + this.vx * this.speed;
    this.y = this.y + this.vy * this.speed;
    this.vx = (this.x < canvas.width && this.x > 0) ? this.vx : (-this.vx);
    this.vy = (this.y < canvas.height && this.y > 0) ? this.vy : (-this.vy);
    this.render();
  }

}

dot.html

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>dot</title>
  <style>
    html,
    body {
      padding: 0;
      margin: 0;
      height: 100%;
      background-color: rgba(0, 0, 0, .6);
      overflow: hidden;
    }
  </style>
</head>

<body>

  <canvas id="dot"></canvas>

  <script src="dot.js" type="text/javascript" charset="utf-8"></script>
  <script>
    // 一些变量
    let num = 500; // 粒子的数量
    let dots = []; // 存储所有粒子的一个数组
    let duration = [1, -1]; // 粒子默认的前进方向,后面会随机取值
    let canvas = document.querySelector('canvas');
    let ctx = canvas.getContext('2d');

    // 设置canvas的大小
    canvas.width = document.body.clientWidth;
    canvas.height = document.body.clientHeight;

    // 随机生成num个粒子
    for (let i = 0; i < num; i++) {
      // 随机x,y坐标、vx方向的速度,vy方向的速度
      let x = Math.ceil(Math.random() * canvas.width);
      let y = Math.ceil(Math.random() * canvas.height);
      let d = duration[Math.floor(Math.random() * duration.length)];
      let vx = Math.ceil(Math.random() * 1) * d;
      let vy = Math.ceil(Math.random() * 2) * d;
      let dot = new Dot(x, y, vx, vy);
      dot.render();
      dots.push(dot);
      // 3s之后粒子整体移动速率变为0.1,让我装一下
      setTimeout(() => {
        dot.speed = .1;
      }, 3000);
    }

    // 移动
    requestAnimationFrame(move);

    function move() {
      // 清除画布
      ctx.clearRect(0, 0, canvas.width, canvas.height);
      for (let i = 0; i < num; i++) {
        dots[i].update();
      }
      requestAnimationFrame(move);
    }
  </script>

</body>

</html>
如果您喜欢这篇文章,那么记得动动你们的👋,给个like或者关注我哦👍。

相关文章

  • Canvas粒子效果,让我们复习一下基本操作

    效果图 代码 dot.js dot.html 如果您喜欢这篇文章,那么记得动动你们的

  • H5 元素点击时候出现闪烁问题

    做一个 canvas 粒子效果的时候, 需要当手指或者鼠标点击页面的时候做一些操作。 由于我的 canvas 是铺...

  • canvas粒子效果

    可以实现鼠标推移粒子,连线粒子,鼠标连线粒子,自定义颜色

  • canvas 会动的粒子效果

    particle-field canvas实现粒子场的动画效果 实现效果:粒子会动并且在一定范围内粒子之间出现连线...

  • 2019-03-21

    JavaScript canvas canvas 绘制图形,结合逻辑整理动画效果,页面柱状图等 基本操作 1.xx...

  • Canvas<粒子svg效果>

    效果图: 想了解基础的,可参考文章 ?此篇文章基本是针对粒子文字效果的改造或着复用,主要是通过对 svg 路径的处...

  • 粒子和UI遮罩,层级

    粒子效果=>Rendering有一个layer,效果和canvas的layer相同 遮罩使用spriteMask就行

  • Canvas实现文字粒子效果

    最终实现效果 实现思路: 获取到canvas绘制后屏幕上像素点的数组,在目标像素点上绘制粒子替换掉原来的内容 绘制...

  • Canvas<粒子文字效果>

    效果图: 参考效果地址: (孰能生巧,现在只能先 “比葫芦画瓢”,慢慢来吧,注释很全,不过还是需要自己加以理解 ?...

  • 基于canvas使用粒子拼出你想要的文字

    写在最前 本次分享一下使用canvas实现粒子效果拼出你想要的文字。 欢迎关注我的博客,不定期更新中—— 起因 不...

网友评论

    本文标题:Canvas粒子效果,让我们复习一下基本操作

    本文链接:https://www.haomeiwen.com/subject/qyadrftx.html