canvas-*落体球

一、思路

  1. 有一个不停画球的方法
  2. 鼠标移入的时候球开始画,这个时候速度不断变化,当去了边界的时候速度变反
  3. 鼠标移走停止画图

二、代码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>ball</title>
</head>
<body>
    <canvas id="canvas" width="600" height="300"></canvas>

    <script>
      var canvas = document.getElementById('canvas');
      var ctx = canvas.getContext('2d');
      var raf;

      var ball = {
        x: 100,
        y: 100,
        vx: 5,
        vy: 2,
        radius: 25,
        color: 'blue',
        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 draw() {
        // 清楚画布上图形
        // ctx.clearRect(0,0, canvas.width, canvas.height);
        // 不清楚 半透明
        ctx.fillStyle = 'rgba(255,255,255,0.3)';
        ctx.fillRect(0,0,canvas.width,canvas.height);
        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;
        }
        ball.draw();
        ball.x += ball.vx;
        ball.y += ball.vy;
        ball.vy *= .99;
        ball.vy += .25;
        raf = window.requestAnimationFrame(draw);
      }

      canvas.addEventListener('mouseover', function(e){
        raf = window.requestAnimationFrame(draw);
      });

      canvas.addEventListener('mouseout', function(e){
        window.cancelAnimationFrame(raf);
      });

      ball.draw();

    </script>
</body>
</html>

 

上一篇:canvas实现碰壁反弹(小球)


下一篇:完美地诠释了matplotlib画图的figure→axes→axis结构