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 相关文章推荐
让firefox支持IE的一些方法的javascript扩展函数代码
Jan 02 Javascript
javscript对象原型的一些看法
Sep 19 Javascript
jQuery fadeTo方法调整图片的透明度使用介绍
May 06 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
Sep 21 Javascript
jQuery轻松实现无缝轮播效果
Mar 22 jQuery
cordova入门基础教程及使用中遇到的一些问题总结
Nov 14 Javascript
layerUI下的绑定事件实例代码
Aug 17 Javascript
Vue中computed、methods与watch的区别总结
Apr 10 Javascript
JS学习笔记之贪吃蛇小游戏demo实例详解
May 29 Javascript
微信小程序使用车牌号输入法的示例代码
Aug 20 Javascript
在vue中实现给每个页面顶部设置title
Jul 29 Javascript
JavaScript 异步时序问题
Nov 20 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
建立文件交换功能的脚本(三)
2006/10/09 PHP
WHOIS类的修改版
2006/10/09 PHP
PHP不用递归实现无限分级的例子分享
2014/04/18 PHP
thinkphp autoload 命名空间自定义 namespace
2015/07/17 PHP
JavaScript的21条基本知识点
2014/03/04 Javascript
改变状态栏文字的js代码
2014/06/13 Javascript
深入分析下javascript中的[]()+!
2015/07/07 Javascript
js绘制圆形和矩形的方法
2015/08/05 Javascript
浅谈js中StringBuffer类的实现方法及使用
2016/09/02 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
2016/09/05 Javascript
React-Native左右联动List的示例代码
2017/09/21 Javascript
微信小程序methods中定义的方法互相调用的实例代码
2018/08/07 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
2019/05/30 Javascript
vue@cli3项目模板怎么使用public目录下的静态文件
2020/07/07 Javascript
解决VUEX的mapState/...mapState等取值问题
2020/07/24 Javascript
JSON 入门教程基础篇 json入门学习笔记
2020/09/22 Javascript
python命令行解析之parse_known_args()函数和parse_args()使用区别介绍
2018/01/24 Python
Sanic框架安装与简单入门示例
2018/07/16 Python
详解Matplotlib绘图之属性设置
2019/08/23 Python
opencv实现简单人脸识别
2021/02/19 Python
使用Python3 poplib模块删除服务器多天前的邮件实现代码
2020/04/24 Python
python函数调用,循环,列表复制实例
2020/05/03 Python
python 常见的反爬虫策略
2020/09/27 Python
如何用用Python将地址标记在地图上
2021/02/07 Python
详解使用HTML5的classList属性操作CSS类
2017/10/13 HTML / CSS
极简的HTML5模版
2015/07/09 HTML / CSS
100%法国制造的游戏和玩具:Les Jouets Français
2021/03/02 全球购物
西安众合通用.net笔试题
2013/03/18 面试题
自荐信范文
2013/12/10 职场文书
财务总经理岗位职责
2014/02/16 职场文书
酒店员工培训方案
2014/06/02 职场文书
广告艺术设计专业自荐书
2014/07/08 职场文书
先进学校事迹材料
2014/12/30 职场文书
行政诉讼答辩状
2015/05/21 职场文书
2016年幼儿园庆六一开幕词
2016/03/04 职场文书