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 相关文章推荐
为jQuery.Treeview添加右键菜单的实现代码
Oct 22 Javascript
jquery中event对象属性与方法小结
Dec 18 Javascript
JavaScript中String.match()方法的使用详解
Jun 06 Javascript
浅谈js中子页面父页面方法 变量相互调用
Aug 04 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(放大缩小)
Dec 02 Javascript
详解js正则表达式验证时间格式xxxx-xx-xx形式
Feb 09 Javascript
AngularJS select加载数据选中默认值的方法
Feb 28 Javascript
详解vue-router传参的两种方式
Sep 10 Javascript
vue 项目地址去掉 #的方法
Oct 20 Javascript
详解mpvue开发微信小程序基础知识
Sep 23 Javascript
vue ajax 拦截原理与实现方法示例
Nov 29 Javascript
vue 在methods中调用mounted的实现操作
Aug 07 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
9个PHP开发常用功能函数小结
2011/07/15 PHP
PHP中fwrite与file_put_contents性能测试代码
2013/08/02 PHP
php检测useragent版本示例
2014/03/24 PHP
PHP的微信支付接口使用方法讲解
2019/03/08 PHP
javascript网页关键字高亮代码
2008/07/30 Javascript
[原创]IE view-source 无法查看看源码 JavaScript看网页源码
2009/07/19 Javascript
javascript 处理事件绑定的一些兼容写法
2009/12/24 Javascript
JavaScript 编写匿名函数的几种方法
2010/02/21 Javascript
jQuery UI 应用不同Theme的办法
2010/09/12 Javascript
js弹出窗口之弹出层的小例子
2013/06/17 Javascript
js实现瀑布流的一种简单方法实例分享
2013/11/04 Javascript
js中对象的声明方式以及数组的一些用法示例
2013/12/11 Javascript
用JavaScript实现一个代码简洁、逻辑不复杂的多级树
2014/05/23 Javascript
通过Jquery.cookie.js实现展示浏览网页的历史记录超管用
2015/10/23 Javascript
JavaScipt中栈的实现方法
2016/02/17 Javascript
html中鼠标滚轮事件onmousewheel的处理方法
2016/11/11 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
python目录操作之python遍历文件夹后将结果存储为xml
2014/01/27 Python
python生成指定尺寸缩略图的示例
2014/05/07 Python
详解Python pygame安装过程笔记
2017/06/05 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
Django Rest framework三种分页方式详解
2019/07/26 Python
Python之字典对象的几种创建方法
2020/09/30 Python
css3高级选择器使用方法
2013/12/02 HTML / CSS
AmazeUI图片轮播效果的示例代码
2020/08/20 HTML / CSS
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
会计自荐书
2013/12/02 职场文书
借款协议书范本
2014/04/22 职场文书
团队口号大全
2014/06/06 职场文书
集中采购方案
2014/06/10 职场文书
爱护公共设施的标语
2014/06/24 职场文书
经济纠纷起诉状
2015/05/20 职场文书
python scipy 稀疏矩阵的使用说明
2021/05/26 Python
python用tkinter开发的扫雷游戏
2021/06/01 Python
CentOS下安装Jenkins的完整步骤
2022/04/07 Servers