使用HTML5 Canvas制作时钟
使用HTML5 Canvas制作时钟是一个很有趣的技术,它可以帮助我们快速制作出一个美观而又实用的时钟。下面我们就来看看如何使用HTML5 Canvas来制作时钟。
1. 创建Canvas元素
我们需要在HTML文件中创建一个Canvas元素,用于显示时钟:
这里,我们为Canvas元素指定了一个id,以便我们可以在JavaScript代码中引用它。
2. 编写JavaScript代码
我们需要编写JavaScript代码来实现时钟的功能:
// 获取Canvas元素
var canvas = document.getElementById("clock");
// 获取Canvas的2D绘图环境
var ctx = canvas.getContext("2d");
// 设置画布的宽高
var width = canvas.width;
var height = canvas.height;
// 设置时钟的半径
var r = width / 2;
// 设置刻度线的宽度
var lineWidth = 10 * r / 200;
// 设置时钟中心点
var cx = width / 2;
var cy = height / 2;
// 绘制时钟的外边框
function drawCircle(){
ctx.save();
ctx.translate(cx, cy);
ctx.beginPath();
ctx.lineWidth = lineWidth;
ctx.arc(0, 0, r, 0, 2 * Math.PI);
ctx.stroke();
ctx.closePath();
ctx.restore();
}
// 绘制时钟的刻度线
function drawScale(){
ctx.save();
ctx.translate(cx, cy);
ctx.beginPath();
for(var i = 0; i < 60; i++){
// 计算刻度线的起始点
var startX = r * Math.cos(i * Math.PI / 30);
var startY = r * Math.sin(i * Math.PI / 30);
// 计算刻度线的结束点
var endX = (r - lineWidth) * Math.cos(i * Math.PI / 30);
var endY = (r - lineWidth) * Math.sin(i * Math.PI / 30);
ctx.moveTo(startX, startY);
ctx.lineTo(endX, endY);
}
ctx.stroke();
ctx.closePath();
ctx.restore();
}
// 绘制时钟的指针
function drawPointer(){
var now = new Date();
var hour = now.getHours();
var minute = now.getMinutes();
var second = now.getSeconds();
// 绘制时针
ctx.save();
ctx.translate(cx, cy);
ctx.beginPath();
ctx.rotate(hour * Math.PI / 6 + minute * Math.PI / 360 + second * Math.PI / 21600);
ctx.moveTo(0, 10 * r / 200);
ctx.lineTo(0, -r / 2);
ctx.lineWidth = 8 * r / 200;
ctx.stroke();
ctx.closePath();
ctx.restore();
// 绘制分针
ctx.save();
ctx.translate(cx, cy);
ctx.beginPath();
ctx.rotate(minute * Math.PI / 30 + second * Math.PI / 1800);
ctx.moveTo(0, 10 * r / 200);
ctx.lineTo(0, -r + 20 * r / 200);
ctx.lineWidth = 6 * r / 200;
ctx.stroke();
ctx.closePath();
ctx.restore();
// 绘制秒针
ctx.save();
ctx.translate(cx, cy);
ctx.beginPath();
ctx.rotate(second * Math.PI / 30);
ctx.moveTo(-2 * r / 200, 20 * r / 200);
ctx.lineTo(2 * r / 200, 20 * r / 200);
ctx.lineTo(1 * r / 200, -r + 18 * r / 200);
ctx.lineTo(-1 * r / 200, -r + 18 * r / 200);
ctx.fillStyle = "#c14543";
ctx.fill();
ctx.closePath();
ctx.restore();
}
// 绘制时钟
function drawClock(){
ctx.clearRect(0, 0, width, height);
drawCircle();
drawScale();
drawPointer();
setTimeout(drawClock, 1000);
}
drawClock();
这段JavaScript代码的主要功能是:
- 获取Canvas元素;
- 设置画布的宽高、时钟的半径和刻度线的宽度;
- 绘制时钟的外边框;
- 绘制时钟的刻度线;
- 绘制时钟的指针;
- 定时调用绘制时钟的函数,使时钟动起来。
3. 运行结果
我们可以在浏览器中打开HTML文件,看到一个美观而又实用的时钟: