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 对象成员的可见性说明
Oct 16 Javascript
javascript 面向对象全新理练之原型继承
Dec 03 Javascript
jQuery实现动画效果的简单实例
Jan 27 Javascript
加载列表时jquery获取ul中第一个li的属性
Nov 02 Javascript
封装好的一个万能检测表单的方法
Jan 21 Javascript
JS实现简单路由器功能的方法
May 27 Javascript
jQuery实现手机上输入后隐藏键盘功能
Jan 04 Javascript
浅谈 Vue 项目优化的方法
Dec 16 Javascript
使用vue-aplayer插件时出现的问题的解决
Mar 02 Javascript
微信小程序实现全局搜索代码高亮的示例
Mar 30 Javascript
基于Vue和Element-Ui搭建项目的方法
Sep 06 Javascript
Vue向后台传数组数据,springboot接收vue传的数组数据实例
Nov 12 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 数组排序方法总结 推荐收藏
2010/06/30 PHP
PHP函数实现从一个文本字符串中提取关键字的方法
2015/07/01 PHP
[原创]ThinkPHP让../Public在模板不解析(直接输出)的方法
2015/10/09 PHP
PHP单态模式简单用法示例
2016/11/16 PHP
Js+Flash实现访问剪切板操作
2012/11/20 Javascript
单击按钮显示隐藏子菜单经典案例
2013/01/04 Javascript
JS链式调用的实现方法
2013/03/07 Javascript
瀑布流布局代码一例
2014/04/11 Javascript
bootstrap table 服务器端分页例子分享
2015/02/10 Javascript
js游戏人物上下左右跑步效果代码分享
2015/08/28 Javascript
一个例子轻松学会Vue.js
2017/01/02 Javascript
jquery实现图片上传前本地预览
2017/04/28 jQuery
vue首次赋值不触发watch的解决方法
2018/09/11 Javascript
原生JS实现简单的无缝自动轮播效果
2018/09/26 Javascript
JavaScript 对引擎、运行时、调用堆栈的概述理解
2018/10/22 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
2020/11/05 Javascript
[01:08]DOTA2“血战之命”预告片
2017/08/12 DOTA
Python调用SQLPlus来操作和解析Oracle数据库的方法
2016/04/09 Python
用python实现简单EXCEL数据统计的实例
2017/01/24 Python
火车票抢票python代码公开揭秘!
2018/03/08 Python
python2 与 pyhton3的输入语句写法小结
2018/09/10 Python
想学python 这5本书籍你必看!
2018/12/11 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
python编写简单端口扫描器
2019/09/04 Python
pycharm 代码自动补全的实现方法(图文)
2020/09/18 Python
Python文件操作及内置函数flush原理解析
2020/10/13 Python
python实现跨年表白神器--你值得拥有
2021/01/04 Python
缅怀革命先烈演讲稿
2014/05/14 职场文书
机械专业技术员求职信
2014/06/14 职场文书
会议接待欢迎标语
2014/10/08 职场文书
团员自我评价范文
2015/03/10 职场文书
通知的写法
2015/04/23 职场文书
个人合作协议范本
2015/08/06 职场文书
蓝天保卫战收官在即 :15行业将开展环保分级评价
2019/07/19 职场文书
MySql 缓存查询原理与缓存监控和索引监控介绍
2021/07/02 MySQL
JS setTimeout与setInterval的区别
2022/04/20 Javascript