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


Posted in Javascript onAugust 17, 2017

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放置反弹效果随机图形(实例)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript delete 使用示例代码
Mar 29 Javascript
Jquery validation remote 验证的缓存问题解决方法
Mar 25 Javascript
JS截取与分割字符串常用技巧总结
Nov 10 Javascript
基于JS实现的笛卡尔乘积之商品发布
May 13 Javascript
解决Window10系统下Node安装报错的问题分析
Dec 13 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
Apr 11 Javascript
jQuery事件对象的属性和方法详解
Sep 09 jQuery
vue项目中仿element-ui弹框效果的实例代码
Apr 22 Javascript
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
May 13 Javascript
关于vue组件事件属性穿透详解
Oct 28 Javascript
vue.js iview打包上线后字体图标不显示解决办法
Jan 20 Javascript
js实现鼠标拖曳效果
Dec 30 Javascript
js实现方块上下左右移动效果
Aug 17 #Javascript
JavaScript中一些特殊的字符运算
Aug 17 #Javascript
在 Angular 中使用Chart.js 和 ng2-charts的示例代码
Aug 17 #Javascript
JS 中LocalStorage和SessionStorage的使用
Aug 17 #Javascript
jQuery的时间datetime控件在AngularJs中的使用实例(分享)
Aug 17 #jQuery
详解JS中的柯里化(currying)
Aug 17 #Javascript
JavaScript实现简单评论功能
Aug 17 #Javascript
You might like
解析PayPal支付接口的PHP开发方式
2010/11/28 PHP
PHP计划任务、定时执行任务的实现代码
2011/04/23 PHP
PHP实现根据浏览器跳转不同语言页面代码
2013/08/02 PHP
linux系统下php安装mbstring扩展的二种方法
2014/01/20 PHP
PHP中trait使用方法详细介绍
2017/05/21 PHP
简单实现php上传文件功能
2017/09/21 PHP
js 目录列举函数
2008/11/06 Javascript
url 编码 js url传参中文乱码解决方案
2010/04/11 Javascript
extjs grid设置某列背景颜色和字体颜色的实现方法
2010/09/06 Javascript
深入理解Javascript中的循环优化
2013/11/09 Javascript
js触发select onchange事件的小技巧
2014/08/05 Javascript
Javascript调用函数方法的几种方式介绍
2015/03/20 Javascript
js实现div层缓慢收缩与展开的方法
2015/05/11 Javascript
将页面table内容与样式另存成excel文件的方法
2015/08/05 Javascript
对象题目的一个坑 理解Javascript对象
2015/12/22 Javascript
学习Javascript面向对象编程之封装
2016/02/23 Javascript
Angularjs中的ui-bootstrap的使用教程
2017/02/19 Javascript
jQuery插件HighCharts绘制2D带Label的折线图效果示例【附demo源码下载】
2017/03/08 Javascript
Vue与Node.js通过socket.io通信的示例代码
2018/07/25 Javascript
jquery获取select选中值的文本,并赋值给另一个输入框的方法
2018/08/21 jQuery
vue单页缓存方案分析及实现
2018/09/25 Javascript
深入浅析vue-cli@3.0 使用及配置说明
2019/05/08 Javascript
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
2019/07/06 Javascript
JQuery 实现文件下载的常用方法分析
2019/10/29 jQuery
对sklearn的使用之数据集的拆分与训练详解(python3.6)
2018/12/14 Python
Python设计模式之简单工厂模式实例详解
2019/01/22 Python
Python hexstring-list-str之间的转换方法
2019/06/12 Python
Jupyter打开图形界面并画出正弦函数图像实例
2020/04/24 Python
纯CSS3实现手风琴风格菜单具体步骤
2013/05/06 HTML / CSS
阿里巴巴的Oracle DBA笔试题答案-SQL tuning类
2016/04/03 面试题
董事长秘书岗位职责
2013/11/29 职场文书
少先队活动总结
2014/08/29 职场文书
工程索赔意向书
2014/08/30 职场文书
副校长个人对照检查材料思想汇报
2014/10/04 职场文书
李强优秀员工观后感
2015/06/16 职场文书
Python 图片添加美颜效果
2022/04/28 Python