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 打印内容方法小结
Nov 04 Javascript
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
May 23 Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
Mar 04 Javascript
JS 清除字符串数组中,重复元素的实现方法
May 24 Javascript
jQuery中值得注意的trigger方法浅析
Dec 12 Javascript
浅谈键盘上回车按钮的js触发事件
Feb 13 Javascript
JS正则替换去空格的方法
Mar 24 Javascript
JS中图片压缩的方法小结
Nov 14 Javascript
CKEditor4配置与开发详细中文说明文档
Oct 08 Javascript
js 实现在2d平面上画8的方法
Oct 10 Javascript
如何实现一个简易版的vuex持久化工具
Sep 11 Javascript
javascript递归函数定义和用法示例分析
Jul 22 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(6) 面向对象
2010/02/16 PHP
通过javascript的匿名函数来分析几段简单有趣的代码
2010/06/29 Javascript
本地对象Array的原型扩展实现代码
2010/12/04 Javascript
映彩衣的js随笔(js图片切换效果)
2011/07/31 Javascript
JS使用for循环遍历Table的所有单元格内容
2014/08/21 Javascript
jQuery CSS()方法改变现有的CSS样式表
2014/09/09 Javascript
node.js中的path.resolve方法使用说明
2014/12/08 Javascript
JS操作HTML自定义属性的方法
2015/02/10 Javascript
js下拉选择框与输入框联动实现添加选中值到输入框的方法
2015/08/17 Javascript
jQuery实现简单的文件上传进度条效果
2020/03/26 Javascript
Bootstrap超大屏幕的实现代码
2017/03/22 Javascript
JavaScript实现经纬度转换成地址功能
2017/03/28 Javascript
node.js实现登录注册页面
2017/04/08 Javascript
vue判断input输入内容全是空格的方法
2018/03/02 Javascript
vue 自定义指令自动获取文本框焦点的方法
2018/08/25 Javascript
JS插入排序简单理解与实现方法分析
2019/11/25 Javascript
Python科学计算环境推荐——Anaconda
2014/06/30 Python
Python中的魔法方法深入理解
2014/07/09 Python
利用python获取当前日期前后N天或N月日期的方法示例
2017/07/30 Python
Python实现翻转数组功能示例
2018/01/12 Python
Python中的几种矩阵乘法(小结)
2019/07/10 Python
Python统计学一数据的概括性度量详解
2020/03/03 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
2020/04/27 Python
Win10下用Anaconda安装TensorFlow(图文教程)
2020/06/18 Python
Python爬取微信小程序Charles实现过程图解
2020/09/29 Python
python 下载文件的几种方法汇总
2021/01/06 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
2021/03/03 Python
微软澳洲官方网站:Microsoft Australia
2017/01/10 全球购物
联想韩国官网:Lenovo Korea
2018/05/10 全球购物
外贸业务员求职自荐信分享
2013/09/21 职场文书
缴纳养老保险的证明
2014/01/10 职场文书
法人代表证明书
2014/09/18 职场文书
2014年社团工作总结范文
2014/11/27 职场文书
介绍信模板
2015/01/31 职场文书
2015年八一建军节演讲稿
2015/03/19 职场文书
MySQL之MyISAM存储引擎的非聚簇索引详解
2022/03/03 MySQL