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读取ASP设定的COOKIE
Feb 15 Javascript
JavaScript 入门·JavaScript 具有全范围的运算符
Oct 01 Javascript
javascript基础知识大集锦(一) 推荐收藏
Jan 13 Javascript
分享27个jQuery 表单插件集合推荐
Apr 25 Javascript
javascript通过class来获取元素实现代码
Feb 20 Javascript
基于JavaScript 下namespace 功能的简单分析
Jul 05 Javascript
js select下拉联动 更具级联性!
Apr 17 Javascript
bootstrap侧边栏圆点导航
Jan 11 Javascript
纯JS实现轮播图
Feb 22 Javascript
JS如何实现在页面上快速定位(锚点跳转问题)
Aug 14 Javascript
JS实现图片切换特效
Dec 23 Javascript
原生JS实现天气预报
Jun 16 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+AJAX传送中文会导致乱码的问题的解决方法
2008/09/08 PHP
通过PHP修改Linux或Unix口令的方法分享
2012/01/30 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
2014/11/18 PHP
php中使用array_filter()函数过滤数组实例讲解
2021/03/03 PHP
js模拟弹出效果代码修正版
2008/08/07 Javascript
基于jquery实现的定时显示与隐藏div广告的实现代码
2013/08/22 Javascript
String.prototype实现的一些javascript函数介绍
2013/11/22 Javascript
当滚动条滚动到页面底部自动加载增加内容的js代码
2014/05/13 Javascript
JavaScript字符串对象toLowerCase方法入门实例(用于把字母转换为小写)
2014/10/17 Javascript
js实现Select下拉框具有输入功能的方法
2015/02/06 Javascript
JavaScript生成的动态下雨背景效果实现方法
2015/02/25 Javascript
在JavaScript中处理字符串之link()方法的使用
2015/06/08 Javascript
基于jQuery通过jQuery.form.js插件实现异步上传
2015/12/13 Javascript
JS数组去重(4种方法)
2017/03/27 Javascript
Vue2递归组件实现树形菜单
2017/04/10 Javascript
JavaScript实现的斑马线表格效果【隔行变色】
2017/09/18 Javascript
详解如何在React组件“外”使用父组件的Props
2018/01/12 Javascript
详解webpack-dev-server 设置反向代理解决跨域问题
2018/04/18 Javascript
vue-cli2.9.3 详细教程
2018/04/23 Javascript
如何为vuex实现带参数的 getter和state.commit
2019/01/04 Javascript
微信小程序实现单选选项卡切换效果
2020/06/19 Javascript
react中hook介绍以及使用教程
2020/12/11 Javascript
[12:36]《DOTA2》国服注册与激活指南全攻略
2013/04/28 DOTA
Python实现建立SSH连接的方法
2015/06/03 Python
Python判断两个对象相等的原理
2017/12/12 Python
利用Python代码实现数据可视化的5种方法详解
2018/03/25 Python
浅谈python实现Google翻译PDF,解决换行的问题
2018/11/28 Python
Python叠加矩形框图层2种方法及效果
2020/06/18 Python
Python在线和离线安装第三方库的方法
2020/10/31 Python
深圳-东方伟业笔试部分
2015/02/11 面试题
团工委书记自荐书范文
2013/12/17 职场文书
自我鉴定写作要点
2014/01/17 职场文书
会计与出纳自荐书范文
2014/03/16 职场文书
交通安全横幅标语
2014/10/07 职场文书
机动车交通事故协议书
2015/01/29 职场文书
2015年工会工作总结
2015/03/30 职场文书