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 相关文章推荐
onpropertypchange
Jul 01 Javascript
循环 vs 递归浅谈
Feb 28 Javascript
jQuery对象数据缓存Cache原理及jQuery.data方法区别介绍
Apr 07 Javascript
可简单避免的三个JS发布错误的详细介绍
Aug 02 Javascript
jquery中插件实现自动添加用户的具体代码
Nov 15 Javascript
JQuery中serialize() 序列化
Mar 13 Javascript
使用JQuery实现智能表单验证功能
Mar 08 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
Oct 01 Javascript
Angular指令之restict匹配模式的详解
Jul 27 Javascript
JavaScript中的E-mail 地址格式验证
Mar 28 Javascript
详解js创建对象的几种方法及继承
Apr 12 Javascript
VUE组件中的 Drawer 抽屉实现代码
Aug 06 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
咖啡因含量是由谁决定的?低因咖啡怎么来?低因咖啡适合什么人喝
2021/03/06 新手入门
php遍历文件夹和文件列表示例分享
2014/03/11 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十四)
2014/06/26 PHP
php采用curl实现伪造IP来源的方法
2014/11/21 PHP
初识laravel5
2015/03/02 PHP
学习php设计模式 php实现模板方法模式
2015/12/08 PHP
Javascript 静态页面实现随机显示广告的办法
2010/11/17 Javascript
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
2011/11/14 Javascript
浅谈页面装载js及性能分析方法
2014/12/09 Javascript
JavaScript获取当前网页最后修改时间的方法
2015/04/03 Javascript
JS动态插入并立即执行回调函数的方法
2016/04/21 Javascript
jQuery Validate验证框架详解(推荐)
2016/12/17 Javascript
Vue-Router实现页面正在加载特效方法示例
2017/02/12 Javascript
Vue 2.0中生命周期与钩子函数的一些理解
2017/05/09 Javascript
基于JS对象创建常用方式及原理分析
2017/06/28 Javascript
基于Node.js模板引擎教程-jade速学与实战1
2017/09/17 Javascript
js 判断一个数字是不是2的n次方幂的实例
2017/11/26 Javascript
vue-rx的初步使用教程
2018/09/21 Javascript
H5+C3+JS实现五子棋游戏(AI篇)
2020/05/28 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
2019/02/15 jQuery
浅谈js中的bind
2019/03/18 Javascript
python重试装饰器示例
2014/02/11 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
Anaconda2 5.2.0安装使用图文教程
2018/09/19 Python
python pexpect ssh 远程登录服务器的方法
2019/02/14 Python
使用pytorch实现论文中的unet网络
2020/06/24 Python
html5的websockets全双工通信详解学习示例
2014/02/26 HTML / CSS
JavaScript+Canvas实现自定义画板的示例代码
2019/05/13 HTML / CSS
监理资料员岗位职责
2014/01/03 职场文书
个人承诺书怎么写
2014/05/24 职场文书
代领学位证书毕业证书委托书
2014/09/30 职场文书
百家讲坛观后感
2015/06/12 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书
导游词之介休绵山
2019/12/31 职场文书
Python进行区间取值案例讲解
2021/08/02 Python