Canvas放置反弹效果随机图形(实例)

 更新时间:2017年08月17日 09:19:15   投稿:jingxian  
下面小编就为大家带来一篇Canvas放置反弹效果随机图形(实例)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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实现网页截图功能

    这篇文章主要介绍了JavaScript实现网页截图功能,本文介绍了2款实现JavaScript截图的开源组件,一个是Canvas2Image,一个是html2canvas,需要的朋友可以参考下
    2014-10-10
  • javascript自适应宽度的瀑布流实现思路

    javascript自适应宽度的瀑布流实现思路

    这里主要介绍瀑布流的一种实现方法:绝对定位(css)+javascript+ajax+json。简单一点如果不做滚动加载的话就是绝对定位(css)+javascript了,ajax和json是滚动加载更多内容的时候用到的,感兴趣的你可以参考下哦
    2013-02-02
  • javascript实现的文字加密解密

    javascript实现的文字加密解密

    javascript实现的文字加密解密...
    2007-06-06
  • js实现仿QQ秀换装效果的方法

    js实现仿QQ秀换装效果的方法

    这篇文章主要介绍了js实现仿QQ秀换装效果的方法,实例分析了javascript操作图片的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • js实现多个倒计时并行 js拼团倒计时

    js实现多个倒计时并行 js拼团倒计时

    这篇文章主要为大家详细介绍了js实现多个倒计时并行功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • JS仿hao123导航页面图片轮播效果

    JS仿hao123导航页面图片轮播效果

    这篇文章主要介绍了JS仿hao123导航页面图片轮播效果,代码简单易懂,非常不错,具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-09-09
  • 使用InstantClick.js让页面提前加载200ms

    使用InstantClick.js让页面提前加载200ms

    本篇文章主要介绍了使用InstantClick.js让页面提前加载200ms,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • url中的特殊符号有什么含义(推荐)

    url中的特殊符号有什么含义(推荐)

    这篇文章主要介绍了url中的特殊符号有什么含义(推荐)的相关资料,需要的朋友可以参考下
    2016-06-06
  • 借助script进行Http跨域请求:JSONP实现原理及代码

    借助script进行Http跨域请求:JSONP实现原理及代码

    script元素的src属性能设置URL并发起HTTP GET请求实现脚本操作HTTP可以跨域通信而不受限与同源策略,接下来为大家详细介绍下Http跨域请求实现,感兴趣的你可以参考下哈
    2013-03-03
  • JavaScript代码实现春晚刘谦魔术的模拟程序

    JavaScript代码实现春晚刘谦魔术的模拟程序

    昨晚春晚上刘谦的两个魔术表演都非常精彩,尤其是第二个魔术,他演绎了经典的约瑟夫环问题!约瑟夫环是一个经典的数学问题,本文给出了完整的 JavaScript 代码实现,感兴趣的同学可以自己动手实现一下
    2024-02-02

最新评论