Canvas放置反弹效果随机图形(实例)

发布时间 - 2026-01-11 02:49:54    点击率:

Canvas放置反弹效果随机图形(实例)

var raf;
  var arror = [];
  var running = false;
  //绘制圆形
  function createBall() {
    return {
      x: 0,
      y: 0,
      vx: 10-Math.random()*10,
      vy: 10-Math.random()*10,
      radius: 25,
      color:"red",
      draw: function() {
        ctx.beginPath();
        ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2, true);
        ctx.closePath();
        ctx.fillStyle = this.color;
        ctx.fill();
      }
    }
  }
  //绘制正方形
  function createSquare() {
    return {
      x: 0,
      y: 0,
      vx: 10-Math.random()*10,
      vy: 10-Math.random()*10,
      color:"red",
      draw: function() {
        ctx.beginPath();
        ctx.fillStyle = this.color;
        ctx.fillRect(this.x, this.y,30, 30);
        ctx.closePath();
      }
    }
  }
  //绘制五角星
  function createStar() {
    return {
      x: 0,
      y: 0,
      vx: 10-Math.random()*10,
      vy: 10-Math.random()*10,
      color:"red",
      draw: function() {
        ctx.font = "24px serif";
        ctx.textBaseline = "hanging";
        ctx.fillStyle=this.color;
        ctx.fillText("五角星",this.x, this.y);

      }
    }
  }
  //绘制三角形
  function createTriangle() {
    return {
      x: 0,
      y: 0,
      vx: 10-Math.random()*10,
      vy: 10-Math.random()*10,
      color:"red",
      draw: function() {
        ctx.beginPath();
        ctx.moveTo(this.x,this.y);
        ctx.lineTo(this.x+25,this.y+25);
        ctx.lineTo(this.x+25,this.y-25);
        ctx.fillStyle=this.color;
        ctx.fill();
      }
    }
  }
  //清除
  function clear() {
    ctx.fillStyle = 'rgba(255,255,255,0.3)';
    ctx.fillRect(0,0,canvas.width,canvas.height);
  }
    //判断图形坐标是否超出画布范围
  function draw() {
    clear();
    arror.forEach(function(ball, i){
      ball.draw();
      ball.x += ball.vx;
      ball.y += ball.vy;
      if (ball.y + ball.vy > canvas.height || ball.y + ball.vy < 0) {
        ball.vy = -ball.vy;
      }
      if (ball.x + ball.vx > canvas.width || ball.x + ball.vx < 0) {
        ball.vx = -ball.vx;
      }
    });

    raf = window.requestAnimationFrame(draw);
  }
  canvas.addEventListener('click',function(e){
    if (!running) {
      raf = window.requestAnimationFrame(draw);
      running = true;
    }
    var colorarr=["#000000","#7F7F7F","#880015","#ED1C24","#FF7F27","#FFF200","#22B14C","#00A2E8","#3F48CC","#A349A4","#B97A57","#FFAEC9","#B5E61D"];
    var Graphics = ["Round","Square","Star","Triangle"];
    var typexz=Graphics[Math.floor(Math.random()*4)];
    var ball;
    switch(typexz){
      case "Round":
        ball = createBall();
        break;
      case "Square":
        ball = createSquare();
        break;
      case "Star":
        ball = createStar();
        break;
      case "Triangle":
        ball = createTriangle();
        break;
    }
    ball.x = e.clientX;
    ball.y = e.clientY;
    ball.color = colorarr[Math.floor(Math.random() * 10 + 3)];
    arror.push(ball);
  });
  draw();
 document.addEventListener('keydown',function (e) {
   if(e.keyCode==32){
     event.preventDefault();
     window.cancelAnimationFrame(raf);
     running = false;
   }
 })

以上这篇Canvas放置反弹效果随机图形(实例)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# Canvas放置反弹  # canvas实现动态小球重叠效果  # 给大家  # 角形  # 希望能  # 这篇  # 小编  # 大家多多  # closePath  # PI  # true  # createSquare  # fill  # fillStyle  # draw  # red  # arc  # beginPath  # ctx  # hanging  # textBaseline  # serif 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 简单实现jsp分页  如何用PHP工具快速搭建高效网站?  b2c电商网站制作流程,b2c水平综合的电商平台?  如何快速使用云服务器搭建个人网站?  北京网站制作的公司有哪些,北京白云观官方网站?  深圳网站制作平台,深圳市做网站好的公司有哪些?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  魔方云NAT建站如何实现端口转发?  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  如何在服务器上配置二级域名建站?  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  如何在万网利用已有域名快速建站?  如何做网站制作流程,*游戏网站怎么搭建?  如何在万网开始建站?分步指南解析  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  javascript如何操作浏览器历史记录_怎样实现无刷新导航  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  详解Android中Activity的四大启动模式实验简述  如何在搬瓦工VPS快速搭建网站?  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  想要更高端的建设网站,这些原则一定要坚持!  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  Android仿QQ列表左滑删除操作  使用Dockerfile构建java web环境  Laravel怎么发送邮件_Laravel Mail类SMTP配置教程  如何利用DOS批处理实现定时关机操作详解  历史网站制作软件,华为如何找回被删除的网站?  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  EditPlus中的正则表达式实战(5)  如何快速查询网址的建站时间与历史轨迹?  Laravel storage目录权限问题_Laravel文件写入权限设置  用v-html解决Vue.js渲染中html标签不被解析的问题  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  如何在云主机上快速搭建多站点网站?  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  高防服务器:AI智能防御DDoS攻击与数据安全保障  jQuery validate插件功能与用法详解  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  微信h5制作网站有哪些,免费微信H5页面制作工具?  详解Android——蓝牙技术 带你实现终端间数据传输  Python文件异常处理策略_健壮性说明【指导】  如何在Windows服务器上快速搭建网站?