HTML5之canvas元素时钟演示程序(源代码)

3次阅读
没有评论

HTML5的canvas元素使用JavaScript在网页上绘制图像。canvas拥有多种绘制、椭圆、圆形、字符以及添加方法的。这里使用canvas元素实现的图标演示程序(源代码)

<!DOCTYPE html>
<html>
<头>
<meta http-equiv="Content-type" content="text/html; charset=gbk" />
<title>HTML5 控制器-weisico.com</title>
</头>
<身体>
<中心>
<div><a href="http://www.weisico.com" target="_blank">weisico.com</a> <a href="http://www.weisico.com/tech/254。 html" target="_blank">查看原文</a>
<h1>HTML5 目录</h1>
<canvas id="canvas" width="200" height="200" style="border:1px solid #000;">weisico.com 提示您,请使用支持HTML5的浏览器,例如Chrome,IE9,IE10,火狐等。 </canvas>
</div>
<script type="text/javascript" language="javascript" charset="gbk">
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
如果(ctx){
var timerId;
var frameRate = 60;
函数 canvObject() {
这个.x = 0;
this.y = 0;
this.rotation = 0;
this.borderWidth = 2;
this.borderColor = '#000000';
this.fill = false;
this.fillColor = '#ff0000';
this.update = 函数 () {
if (!this.ctx) throw new Error('weisico.com提示:您没有指定ctx对象。');
var ctx = this.ctx
ctx.save();
ctx.lineWidth = this.borderWidth;
ctx.strokeStyle = this.borderColor;
ctx.fillStyle = this.fillColor;
ctx.translate(this.x, this.y);
if (this.rotation) ctx.rotate(this.rotation * Math.PI / 180);
如果 (this.draw) this.draw(ctx);
如果 (this.fill) ctx.fill();
ctx.stroke();
ctx.restore();
}
};
功能线(){};
Line.prototype = new canvObject();
Line.prototype.fill = false;
Line.prototype.start = [0, 0];
Line.prototype.end = [5, 5];
Line.prototype.draw = 函数(ctx){
ctx.beginPath();
ctx.moveTo.apply(ctx, this.start);
ctx.lineTo.apply(ctx, this.end);
ctx.closePath();
};

功能圆(){};
Circle.prototype = new canvObject();
Circle.prototype.draw = 函数(ctx){
ctx.beginPath();
ctx.arc(0, 0, this.radius, 0, 2 * Math.PI, true);
ctx.closePath();
};

var circle = new Circle();
圆.ctx = ctx;
圆.x = 100;
圆.y = 100;
circle.radius = 90;
circle.fill = true;
circle.borderWidth = 6;
circle.fillColor = '#ffffff';

var hour = new Line();
小时.ctx = ctx;
小时.x = 100;
小时.y = 100;
hour.borderColor = "#000000";
小时.borderWidth = 10;
小时.旋转 = 0;
小时.开始 = [0, 20];
小时.结束 = [0, -50];

var 分钟 = 新行();
分钟.ctx = ctx;
分钟.x = 100;
分钟.y = 100;
min.borderColor = "#333333";
分钟.borderWidth = 7;
分钟.旋转 = 0;
分钟.开始 = [0, 20];
分钟.end = [0, -70];

var seconds = new Line();
秒.ctx = ctx;
秒.x = 100;
秒.y = 100;
seconds.borderColor = "#ff0000";
秒.borderWidth = 4;
秒.旋转 = 0;
seconds.start = [0, 20];
seconds.end = [0, -80];

var center = new Circle();
中心.ctx = ctx;
中心.x = 100;
中心.y = 100;
center.radius = 5;
center.fill = true;
center.borderColor = '橙色';

for (var i = 0, ls = [], 缓存; i < 12; i++) {
缓存 = ls[i] = 新行();
缓存.ctx = ctx;
缓存.x = 100;
缓存.y = 100;
cache.borderColor = "pink";//月色
cache.borderWidth = 2;
cache.rotation = i * 30;
cache.start = [0, -70];
cache.end = [0, -80];
}

timerId = setInterval(函数(){
// 清除画布
ctx.clearRect(0, 0, 200, 200);
// 填充背景色
ctx.fillStyle = '粉红色';
ctx.fillRect(0, 0, 200, 200);
// 包
圈。更新();
// 月月
for (var i = 0; cache = ls[i++]; ) cache.update();
// 时针
hour.rotation = (new Date()).getHours() * 30;
小时.更新();
// 分针
分钟.旋转 = (新日期()).getMinutes() * 6;
分钟.更新();
//秒针
seconds.rotation = (new Date()).getSeconds() * 6;
秒.更新();
// 中心圆
中心更新();
}, (1000 / 帧率) | 0);
} 别的 {
alert('weisico.com提示:您的浏览器不支持HTML5无法预览。');
}
</脚本>
</中心>
</正文>
</html>