一个小的画布Canvas页面,记录点的轨迹

Hello大家好,好久没有更新了,最近在忙一些其他的事,今天说一下画布canvas,下面是我的代码,实现了一个点从画布的(0,0)到(canvas.width,canvas.height)的一个实现其中我在canvas里面加了一个背景,你们只需要把你们的图片放在上面即可实现一小段代码的运行,好久没有说知识点了!!慢慢会来的。打算更一些计网和数据库,暑假说吧!我是:

爱吃鸡爪zi!

话不多说,代码如下:建议从draw函数看起走

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    body {
      display: flex;
      justify-content: center;
      align-items: center;
      height: 100vh;
      margin: 0;
    }
    .container {
      text-align: center;
      font-family: Arial, sans-serif;
      border: 2px solid #000;
      padding: 20px;
      border-radius: 10px;
      box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
      height: 80vh;
      display: flex;
      flex-direction: column;
      justify-content: center;
      align-items: center;
    }
    canvas {
      border: 1px solid #000;
      width: 80%;
      height: 50%;
    }
    .buttons {
      margin-top: 20px;
    }
    button {
      margin: 0 10px;
      padding: 10px 20px;
      font-size: 16px;
      cursor: pointer;
    }
  </style>
</head>
<body>
  <div class="container">
    <h1>路径安全活动展示</h1>
    <canvas id="myCanvas"></canvas>
    <div class="buttons">
      <button id="backButton">返回上一级</button>
      <button id="refreshButton">刷新</button>
      <button id="stopButton">停止动画</button>
    </div>
  </div>

  <script>
    var canvas = document.getElementById('myCanvas');
    var ctx = canvas.getContext('2d');
   
    // 设置画布的宽度和高度
    canvas.width = 400;
    canvas.height = 400;
    // 创建一个新的Image对象
    var backgroundImage = new Image();
    // 设置Image对象的src属性为你的图片URL
    backgroundImage.src = '../img/bg1.png';

    // 在图片加载完成后,绘制图片到画布上
    backgroundImage.onload = function() {
      ctx.drawImage(backgroundImage, 0, 0, canvas.width, canvas.height);
    };
    // 在图片加载完成后,绘制图片到画布上
    backgroundImage.onload = function() {
      ctx.drawImage(backgroundImage, 0, 0, canvas.width, canvas.height);
    };
    var obstacles = [
      {x:100 ,y:0 , size:15},
      { x: 50, y: 50, size: 10 },
      { x: 100, y: 100, size: 10 },
      {x:180 ,y:100 , size:15},
      { x: 150, y: 150, size: 10 },
      {x:170 ,y:210 , size:15},
      {x:250 ,y:210 , size:15},
      {x:250 ,y:260 , size:15},
      {x:380 ,y:260 , size:15}
    ];

    var redCircle = {
      x: 10,
      y: 10,
      speed: 0.6,
      direction: 'right'
    };

    var animationRunning = true;
    var redCircleVisible = true;

    function drawObstacles() {
      for (var i = 0; i < obstacles.length; i++) {
        var obstacle = obstacles[i];
        ctx.fillStyle = 'black';
        ctx.fillRect(obstacle.x, obstacle.y, obstacle.size, obstacle.size);
      }
    }

    function drawRedCircle() {
      if (redCircleVisible) {
        ctx.fillStyle = 'red';
        ctx.beginPath();
        ctx.arc(redCircle.x, redCircle.y, 10, 0, Math.PI * 2);
        ctx.fill();
      }
    }

    function updateRedCirclePosition() {
      if (redCircle.direction === 'right') {
        redCircle.x += redCircle.speed;
        if (redCircle.x >= canvas.width - 10) {
          redCircle.x = canvas.width - 10;
          redCircle.direction = 'down';
        }
      } else if (redCircle.direction === 'down') {
        redCircle.y += redCircle.speed;
        if (redCircle.y >= canvas.height - 10) {
          redCircle.y = canvas.height - 10;
          redCircleVisible = false;
          animationRunning = false;
          alert("红色点已到达右下角!");
        }
      }

      for (var i = 0; i < obstacles.length; i++) {
        var obstacle = obstacles[i];
        if (
          redCircle.x < obstacle.x + obstacle.size &&
          redCircle.x + 10 > obstacle.x &&
          redCircle.y < obstacle.y + obstacle.size &&
          redCircle.y + 10 > obstacle.y
        ) {
          if (redCircle.direction === 'right') {
            redCircle.direction = 'down';
          } else if (redCircle.direction === 'down') {
            redCircle.direction = 'right';
          }
        }
      }
    }

    function draw() {
        
      ctx.clearRect(0, 0, canvas.width, canvas.height);
      ctx.drawImage(backgroundImage, 0, 0, canvas.width, canvas.height);
      drawObstacles();
      drawRedCircle();
      updateRedCirclePosition();
    }

    function animate() {
      if (animationRunning) {
        draw();
        requestAnimationFrame(animate);
      }
    }

    animate();
    // 按钮事件处理函数
    document.getElementById('backButton').addEventListener('click', function() {
      window.history.back();
    });

    document.getElementById('refreshButton').addEventListener('click', function() {
      window.location.reload();
    });

    document.getElementById('stopButton').addEventListener('click', function() {
      animationRunning = false;
      alert("动画已停止");
    });
  </script>
</body>
</html>

其中,没有使用什么算法,// 设置Image对象的src属性为你的图片URL
    backgroundImage.src = '../img/bg1.png';把这个的src换为自己的即可。下面是我的运行截图:

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值