在网页上用javascript写一个圆形钟表,并显示实时时间
时间: 2024-05-09 09:17:29 浏览: 96
好的,下面是实现该功能的代码:
```
<html>
<head>
<script>
function drawClock() {
var canvas = document.getElementById("clock");
var ctx = canvas.getContext("2d");
var radius = canvas.height / 2;
ctx.beginPath();
ctx.arc(radius, radius, radius-10, 0, 2*Math.PI);
ctx.fillStyle = "white";
ctx.fill();
ctx.lineWidth = 5;
ctx.stroke();
ctx.beginPath();
ctx.arc(radius, radius, 10, 0, 2*Math.PI);
ctx.fillStyle = "black";
ctx.fill();
var now = new Date();
var hour = now.getHours();
var minute = now.getMinutes();
var second = now.getSeconds();
// Draw hour hand
ctx.lineWidth = 7;
ctx.strokeStyle = "black";
ctx.beginPath();
var angle = Math.PI / 6 * hour + Math.PI / 360 * minute;
var x = radius + (radius-40) * Math.cos(angle);
var y = radius + (radius-40) * Math.sin(angle);
ctx.moveTo(radius, radius);
ctx.lineTo(x, y);
ctx.stroke();
// Draw minute hand
ctx.lineWidth = 5;
ctx.strokeStyle = "black";
ctx.beginPath();
angle = Math.PI / 30 * minute + Math.PI / 1800 * second;
x = radius + (radius-20) * Math.cos(angle);
y = radius + (radius-20) * Math.sin(angle);
ctx.moveTo(radius, radius);
ctx.lineTo(x, y);
ctx.stroke();
// Draw second hand
ctx.lineWidth = 3;
ctx.strokeStyle = "red";
ctx.beginPath();
angle = Math.PI / 30 * second;
x = radius + (radius-10) * Math.cos(angle);
y = radius + (radius-10) * Math.sin(angle);
ctx.moveTo(radius, radius);
ctx.lineTo(x, y);
ctx.stroke();
setTimeout(drawClock, 1000);
}
window.onload = function() {
drawClock();
}
</script>
</head>
<body>
<canvas id="clock" width="200" height="200"></canvas>
</body>
</html>
```
解释一下代码:
- 首先创建一个 `canvas` 元素,并给它一个 `id` 为 `clock`。
- 在 `window.onload` 事件中调用 `drawClock` 函数,以便在页面加载完毕后开始绘制钟表。
- `drawClock` 函数主要分为以下几个部分:
- 通过 `document.getElementById` 获取 `canvas` 元素以及上下文对象 `ctx`。
- 计算钟表半径 `radius`。
- 绘制钟表的外圆和中心点。
- 获取当前时间,并计算时、分、秒对应的角度。
- 绘制时针、分针、秒针。其中时针的角度需要加上分钟的偏移量,分针的角度需要加上秒钟的偏移量。
- 调用 `setTimeout` 函数,每隔一秒钟重新绘制钟表。
注意,为了减少 CPU 的占用率,这里使用了 `setTimeout` 函数的轮询方式来重复绘制钟表。如果需要更加精确地显示时间,可以使用 `requestAnimationFrame` 函数来实现。
阅读全文