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


相关推荐: 如何在IIS管理器中快速创建并配置网站?  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  音乐网站服务器如何优化API响应速度?  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  详解jQuery停止动画——stop()方法的使用  如何在云主机上快速搭建多站点网站?  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  Laravel怎么使用Intervention Image库处理图片上传和缩放  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  焦点电影公司作品,电影焦点结局是什么?  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  java ZXing生成二维码及条码实例分享  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  如何用美橙互联一键搭建多站合一网站?  如何快速打造个性化非模板自助建站?  Android自定义控件实现温度旋转按钮效果  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  如何用狗爹虚拟主机快速搭建网站?  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  Laravel怎么在Controller之外的地方验证数据  西安专业网站制作公司有哪些,陕西省建行官方网站?  如何在建站宝盒中设置产品搜索功能?  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  如何在 React 中条件性地遍历数组并渲染元素  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  Android使用GridView实现日历的简单功能  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  大同网页,大同瑞慈医院官网?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  高端建站如何打造兼具美学与转化的品牌官网?  如何在腾讯云服务器上快速搭建个人网站?  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  如何为不同团队 ID 动态生成多个非值班状态按钮  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  高防服务器租用首荐平台,企业级优惠套餐快速部署  javascript读取文本节点方法小结  敲碗10年!Mac系列传将迎来「触控与联网」双革新  Laravel如何配置和使用缓存?(Redis代码示例)