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 相关文章推荐
深入理解JQuery循环绑定事件
Jun 02 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
Jul 14 Javascript
对Js OOP编程 创建对象的一些全面理解
Jul 26 Javascript
jQuery对checkbox 复选框的全选全不选反选的操作
Aug 09 Javascript
Vuejs第十三篇之组件——杂项
Sep 09 Javascript
Jquery on绑定的事件 触发多次实例代码
Dec 08 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
Jan 05 Javascript
微信小程序动态的加载数据实例代码
Apr 14 Javascript
vue 动态修改a标签的样式的方法
Jan 18 Javascript
Angular数据绑定机制原理
Apr 17 Javascript
浅谈在Vue.js中如何实现时间转换指令
Jan 06 Javascript
Vue 解决多级动态面包屑导航的问题
Nov 04 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
一些PHP写的小东西
2006/12/06 PHP
php获取指定范围内最接近数的方法
2015/06/02 PHP
PHP框架Laravel学习心得体会
2015/10/28 PHP
php封装好的人民币数值转中文大写类
2015/12/20 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
2016/06/13 PHP
php中青蛙跳台阶的问题解决方法
2018/10/14 PHP
javascript dom 基本操作小结
2010/04/11 Javascript
Asp.net下使用Jquery Ajax传送和接收DataTable的代码
2010/09/12 Javascript
解决checkbox的attr(checked)一直为undefined问题
2014/06/16 Javascript
jquery图片倾斜层叠切换特效代码分享
2015/08/27 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
Jquery跨域获得Json的简单实例
2016/05/18 Javascript
jQuery图片切换动画效果
2017/02/28 Javascript
ionic3双击返回退出应用的方法
2019/09/17 Javascript
Vue中添加滚动事件设置的方法详解
2020/09/14 Javascript
springboot+vue实现文件上传下载
2020/11/17 Vue.js
初步介绍Python中的pydoc模块和distutils模块
2015/04/13 Python
浅谈python下含中文字符串正则表达式的编码问题
2018/12/07 Python
python可视化实现代码
2019/01/15 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
2019/08/27 Python
对Django的restful用法详解(自带的增删改查)
2019/08/28 Python
Python自动化完成tb喵币任务的操作方法
2019/10/30 Python
Flask模板引擎Jinja2使用实例
2020/04/23 Python
Python列表如何更新值
2020/05/27 Python
Python学习之os模块及用法
2020/06/03 Python
乐高积木玩具美国官网:LEGO Shop US
2016/09/16 全球购物
6PM官网:折扣鞋、服装及配饰
2018/08/03 全球购物
澳大利亚领先的在线药房:Pharmacy Online(有中文站)
2020/02/22 全球购物
如何在存储过程中使用Loop
2016/01/05 面试题
.NET现在共支持多少种语言
2014/02/26 面试题
《九寨沟》教学反思
2014/04/08 职场文书
工资收入证明
2014/10/07 职场文书
2014个人年度工作总结范文
2014/12/24 职场文书
新郎接新娘保证书
2015/05/08 职场文书
论语读书笔记
2015/06/26 职场文书
JavaScript 防篡改对象的用法示例
2021/04/24 Javascript