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 相关文章推荐
js 复制或插入Html的实现方法小结
May 19 Javascript
javascript随机将第一个dom中的图片添加到第二个div中示例
Oct 08 Javascript
初步认识JavaScript函数库jQuery
Jun 18 Javascript
jQuery实现向下滑出的平滑下拉菜单效果
Aug 21 Javascript
javascript编写简易计算器
May 06 Javascript
使用 Javascript 实现浏览器推送提醒功能的示例
Nov 03 Javascript
微信小程序radio组件使用详解
Jan 31 Javascript
jQuery实现使用sort方法对json数据排序的方法
Apr 17 jQuery
Vue.js 图标选择组件实践详解
Dec 03 Javascript
jQuery表单元素过滤选择器用法实例分析
Feb 20 jQuery
Angular短信模板校验代码
Sep 23 Javascript
JavaScript使用canvas绘制坐标和线
Apr 28 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
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
2019/08/05 PHP
Javascript实例教程(19) 使用HoTMetal(1)
2006/12/23 Javascript
JQuery中操作Css样式的方法
2014/02/12 Javascript
Javascript前端UI框架Kit使用指南之kitjs的对话框组件
2014/11/28 Javascript
javascript字符串循环匹配实例分析
2015/07/17 Javascript
jQuery实现单击弹出Div层窗口效果(可关闭可拖动)
2015/09/19 Javascript
jQGrid动态填充select下拉框的选项值(动态填充)
2016/11/28 Javascript
jquery表单插件form使用方法详解
2017/01/20 Javascript
ReactNative Image组件使用详解
2017/08/07 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
2017/09/12 jQuery
angular2系列之路由转场动画的示例代码
2017/11/09 Javascript
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
Vue中的v-for指令不起效果的解决方法
2018/09/27 Javascript
Vue使用JSEncrypt实现rsa加密及挂载方法
2020/02/07 Javascript
uniapp,微信小程序中使用 MQTT的问题
2020/07/11 Javascript
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
2020/07/28 Javascript
Openlayers实现点闪烁扩散效果
2020/09/24 Javascript
使用typescript快速开发一个cli的实现示例
2020/12/09 Javascript
使用Python来编写HTTP服务器的超级指南
2016/02/18 Python
pyspark操作MongoDB的方法步骤
2019/01/04 Python
python3实现点餐系统
2019/01/24 Python
Python实现多线程下载脚本的示例代码
2020/04/03 Python
python 解决selenium 中的 .clear()方法失效问题
2020/09/01 Python
html5 canvas 简单画板实现代码
2012/01/05 HTML / CSS
Soft Cotton捷克:来自爱琴海棉花的浴袍
2017/02/01 全球购物
Sandro Paris美国官网:典雅别致的法国时尚服饰品牌
2017/12/26 全球购物
Berghaus官网:户外服装和设备,防水服
2020/01/17 全球购物
理工大学毕业生自荐信范文
2014/02/22 职场文书
《小儿垂钓》教学反思
2014/02/23 职场文书
学习雷锋精神心得体会范文
2014/03/12 职场文书
党员岗位承诺书
2014/03/25 职场文书
厨房领班竞聘演讲稿
2014/04/23 职场文书
法制宣传教育方案
2014/05/09 职场文书
龙潭大峡谷导游词
2015/02/10 职场文书
工程部岗位职责范本
2015/04/11 职场文书
假如给我三天光明:舟逆水而行,人遇挫而达 
2019/10/29 职场文书