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 html 静态页面传参数
Apr 10 Javascript
javascript 继承实现方法
Aug 26 Javascript
javaScript 计算两个日期的天数相差(示例代码)
Dec 27 Javascript
深入理解JavaScript中的并行处理
Sep 22 Javascript
JS实现点击表头表格自动排序(含数字、字符串、日期)
Jan 22 Javascript
详解vuejs几种不同组件(页面)间传值的方式
Jun 01 Javascript
js与jQuery实现获取table中的数据并拼成json字符串操作示例
Jul 12 jQuery
使用js实现将后台传入的json数据放在前台显示
Aug 06 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
Aug 30 Javascript
详解webpack引入第三方库的方式以及注意事项
Jan 15 Javascript
微信小程序自定义菜单切换栏tabbar组件代码实例
Dec 30 Javascript
微信小程序实现拍照和相册选取图片
May 09 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
php判断访问IP的方法
2015/06/19 PHP
php实现XSS安全过滤的方法
2015/07/29 PHP
php strftime函数的详细用法
2018/06/21 PHP
PHP执行普通shell命令流程解析
2020/08/24 PHP
Node.js实战 建立简单的Web服务器
2012/03/08 Javascript
jQuery中[attribute^=value]选择器用法实例
2014/12/31 Javascript
JavaScript中的全局对象介绍
2015/01/01 Javascript
jQuery实现鼠标滚轮动态改变样式或效果
2015/01/05 Javascript
angularjs学习笔记之三大模块(modal,controller,view)
2015/09/26 Javascript
AngularJS directive返回对象属性详解
2016/03/28 Javascript
jQuery获取及设置表单input各种类型值的方法小结
2016/05/24 Javascript
返回函数的JavaScript函数
2016/06/14 Javascript
Jquery基础之事件操作详解
2016/06/14 Javascript
原生js和css实现图片轮播效果
2017/02/07 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
2017/11/15 Javascript
微信小程序tabBar模板用法实例分析【附demo源码下载】
2017/11/28 Javascript
使用jQuery 操作table 完成单元格合并的实例
2017/12/27 jQuery
微信小程序生成分享海报方法(附带二维码生成)
2019/03/29 Javascript
vue无限轮播插件代码实例
2019/05/10 Javascript
js实现贪吃蛇游戏(简易版)
2020/09/29 Javascript
python实现ping的方法
2015/07/06 Python
在Pycharm中使用GitHub的方法步骤
2019/06/13 Python
PyQT5 QTableView显示绑定数据的实例详解
2019/06/25 Python
jupyter notebook 使用过程中python莫名崩溃的原因及解决方式
2020/04/10 Python
Python pytesseract验证码识别库用法解析
2020/06/29 Python
python 深度学习中的4种激活函数
2020/09/18 Python
CSS3实现时间轴效果
2016/07/11 HTML / CSS
美国眼镜网站:LensCrafters
2020/01/19 全球购物
Happy Plugs官网:瑞典无线耳机品牌
2020/07/16 全球购物
优质的学校老师推荐信
2013/10/28 职场文书
什么是岗位职责
2013/11/12 职场文书
2014普法依法治理工作总结
2014/12/18 职场文书
2015年卫生监督工作总结
2015/05/21 职场文书
高考1977观后感
2015/06/04 职场文书
Python虚拟环境virtualenv是如何使用的
2021/06/20 Python