返回

花样时钟,点亮你的时间!

前端

在日复一日的平庸中,时间的流逝往往乏味而机械。但当我们拥有了一块花样时钟,一切都变得不一样了。它以其独树一帜的魅力,为我们的生活注入了一抹鲜活的色彩。

使用HTML5的<canvas>元素,我们就能轻松制作出一块赏心悦目的时钟。它不仅可以准确显示时间,更能成为家居装饰的点睛之笔。

1. 搭建画布

首先,我们需要创建一个<canvas>元素并为其设置合适的宽高。为了使时钟具有清晰度,我们建议将其设置为500像素乘以500像素。然后,我们使用getContext()方法获取画布的绘图上下文,以便在上面绘制时钟。

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

canvas.width = 500;
canvas.height = 500;

2. 绘制时钟面

接下来,我们将绘制时钟的表盘。我们可以使用beginPath()arc()方法创建圆形,并用fillStyle()设置其颜色。

ctx.beginPath();
ctx.arc(250, 250, 200, 0, 2 * Math.PI, false);
ctx.fillStyle = "white";
ctx.fill();

3. 标记刻度

为了指示时间,我们需要标记时钟上的刻度。我们可以使用for循环,并根据每小时的度数(360 / 12)绘制小刻度。

for (let i = 0; i < 12; i++) {
  const angle = (Math.PI / 6) * i;
  const x = 250 + 180 * Math.cos(angle);
  const y = 250 + 180 * Math.sin(angle);

  ctx.beginPath();
  ctx.arc(x, y, 5, 0, 2 * Math.PI, false);
  ctx.fillStyle = "black";
  ctx.fill();
}

4. 绘制指针

现在,我们绘制时针、分针和秒针。我们可以使用lineTo()moveTo()方法创建指针的形状,并用strokeStyle()设置其颜色。

// 时针
ctx.beginPath();
ctx.moveTo(250, 250);
ctx.lineTo(250 + 90 * Math.cos(hourAngle), 250 + 90 * Math.sin(hourAngle));
ctx.strokeStyle = "black";
ctx.lineWidth = 10;
ctx.stroke();

// 分针
ctx.beginPath();
ctx.moveTo(250, 250);
ctx.lineTo(250 + 120 * Math.cos(minuteAngle), 250 + 120 * Math.sin(minuteAngle));
ctx.strokeStyle = "black";
ctx.lineWidth = 8;
ctx.stroke();

// 秒针
ctx.beginPath();
ctx.moveTo(250, 250);
ctx.lineTo(250 + 150 * Math.cos(secondAngle), 250 + 150 * Math.sin(secondAngle));
ctx.strokeStyle = "red";
ctx.lineWidth = 6;
ctx.stroke();

5. 动画时钟

为了使时钟动态显示时间,我们需要创建一个动画函数,在其中根据当前时间更新指针的位置。我们使用requestAnimationFrame()方法来触发动画循环。

function updateClock() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  drawClockFace();
  drawMarks();
  drawHands();
  requestAnimationFrame(updateClock);
}

updateClock();

就这样,我们的花样时钟就制作完成了!它不仅美观,而且实用。它将为我们的生活增添一抹个性,并成为我们每天享受的时间的独特装饰。