返回

Canvas 实战指南:创造动感世界里的多彩小球

前端

Canvas 实战指南:创造动感世界里的多彩小球

在充满创意和技术的时代,Canvas 作为 HTML5 的重要组件,为我们提供了更多灵活性和表现力。

现在,我们准备共同踏上 Canvas 实战之旅,学习如何利用 Canvas 绘制一个动态小球,并赋予它生命和互动性。

第一步:新建画布

一开始,我们的 Canvas 是空白的。为了让它成为我们创作的舞台,我们首先要设置 Canvas 的宽高,并找到渲染上下文。

const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');

Canvas 作为容器,ctx 作为画笔,它们将共同帮助我们绘制和动画小球。

第二步:绘制边框

我们已经可以看到 Canvas 了,是不是迫不及待想看到小球在上面动起来?

我们先绘制一个边框,让 Canvas 更加清晰可见。

ctx.strokeStyle = 'black';
ctx.strokeRect(0, 0, canvas.width, canvas.height);

第三步:绘制小球

现在,小球登场啦!我们利用 Canvas 的 path() 和 fill() 方法,配合精心挑选的颜色,让小球鲜活起来。

ctx.beginPath();
ctx.arc(canvas.width / 2, canvas.height / 2, 50, 0, 2 * Math.PI);
ctx.fillStyle = 'red';
ctx.fill();

第四步:赋予小球生命

我们的小球已经有了雏形,但还缺少灵动性。

为了赋予小球生命,我们利用 setInterval() 函数,让小球每隔一段时间移动一小步,并且改变颜色,让它更具活力。

setInterval(() => {
  ctx.clearRect(0, 0, canvas.width, canvas.height); // 清除之前的画面
  ctx.beginPath();
  ctx.arc(x, y, 50, 0, 2 * Math.PI);
  ctx.fillStyle = `rgb(${Math.random() * 255}, ${Math.random() * 255}, ${Math.random() * 255})`;
  ctx.fill();
  x += dx; // 小球在x轴移动的距离
  y += dy; // 小球在y轴移动的距离
  // 边界检测,让小球在Canvas中反弹
  if (x + dx > canvas.width || x + dx < 0) {
    dx = -dx;
  }
  if (y + dy > canvas.height || y + dy < 0) {
    dy = -dy;
  }
}, 10); // 每10毫秒移动一次

第五步:让小球互动起来

现在,我们的小球已经活灵活现了,但它还不够调皮。

为了让小球与用户互动,我们可以添加鼠标移动事件,当用户移动鼠标时,小球会随之改变移动方向,就像一个调皮的孩子在玩耍。

canvas.addEventListener('mousemove', (event) => {
  dx = event.clientX - (canvas.width / 2);
  dy = event.clientY - (canvas.height / 2);
});

结语

恭喜你!你已经完成了 Canvas 实战挑战,创造了一个动感世界里的多彩小球。

现在,你可以自由发挥你的想象力,改变小球的形状、颜色和移动方式,甚至尝试添加更多的小球,创造一个属于你自己的奇幻世界。

Canvas 的世界里,可能性是无限的。尽情探索、创造、玩耍吧!