HTML5 Canvas 绘制时钟
网上会看到很多绘制的时钟,看代码也是云里雾里,自学了下Canvas,觉得不难,就自己做了一个。
先看一下截图:

比较简陋,但是该有的都有了,样式只加了个阴影。
html代码就不贴了,就一个canvas。
<canvas id="clock" width="300" height="300"></canvas>
下面是JS实现:
1、取得上下文:
var clock = document.getElementById('clock'),
context = clock.getContext('2d');
2、为了方便,先把绘制上下文做一下变换。
移动之前原点在左上角,现在把他移动到中心处,这里我们画上钟表中心。
平移之后,0度在下午三点钟方向,我们把他旋转到12点钟方向,这样时间和角度就是统一的了。
context.translate(150, 150); context.rotate(-Math.PI / 2);
3、首先绘制个大圆,作为钟表的外轮廓。
因为在上面做了平移,所以圆心就是(0,0),然后最后一个参数是false,表示按顺时针方向绘制,因为旋转过,所以就是从12点方向,顺时针方向绘制了个圆,正好和表的走法是一致的,
这样后面处理起来就方便的多。
context.beginPath();
context.arc(0, 0, 130, 0, Math.PI * 2, false);
context.closePath();
context.stroke();
4、绘制中心的点
context.beginPath();
context.arc(0, 0, 5, 0, Math.PI * 2, false);
context.closePath();
context.fill();
5、绘制小时刻度,12个,角度间隔是30度,这里需要弧度。
x和y的确定需要画图看一下,其实不难。

x也就是半径的sin值,y是cos值。
var angle = 0; for(var i = 0; i < 12; i++) {
angle += Math.PI / 6;
context.beginPath();
var x = radius * Math.cos(angle),
y = radius * Math.sin(angle);
var dx = 10 * Math.cos(angle);
dy = 10 * Math.sin(angle);
context.moveTo(x, y);
context.lineTo(x - dx, y - dy);
context.stroke();
context.closePath();
}
6、绘制分秒的刻度,60个,和上面一样。
var angle = 0;
for(var i = 0; i < 60; i++) {
angle += Math.PI / 30;
context.beginPath();
var x = radius * Math.cos(angle),
y = radius * Math.sin(angle);
var dx = 3 * Math.cos(angle);
dy = 3 * Math.sin(angle);
context.moveTo(x, y);
context.lineTo(x - dx, y - dy);
context.stroke();
context.closePath();
}
7、接下来就是三根针了,首先获得当前的时间。
小时如果大于12了,我们要减掉12,同时我们会发现,时针不是一下子跳跃的,他也是慢慢的移动到下一个小时的,所以要取得他的准确小时数。
var now = new Date(),
hour = now.getHours(),
minute = now.getMinutes(),
second = now.getSeconds();
hour = hour >= 12 ? hour - 12 : hour; hour += minute / 60;
8、绘制秒针,可以像上面那样的画个图看看。110是长度,时针和分针的绘制方法是一样的。
var xS = 110 * Math.cos(Math.PI / 30 * second),
yS = 110 * Math.sin(Math.PI / 30 * second);
context.beginPath();
context.moveTo(0, 0);
context.lineTo(xS, yS);
context.stroke();
9、动画
动画就是不停的擦除更新,首先在最开始就擦除。
context.clearRect(-150, -150, 300, 300);
然后使用setTimeout。假设之前的都放在drawClock函数里,那么就可以每个一秒就调用自身。
setTimeout(function() {
drawClock();
}, 1000);
这样基本就可以了,然后可以简单的把重复的地方封装一下。
js文件在:http://files.cnblogs.com/zjzhome/clock.js
HTML5 Canvas 绘制时钟的更多相关文章
- html5 Canvas绘制时钟以及绘制运动的圆
1.绘制时钟 <!-- js代码 --> <script type="text/javascript"> window.onload=function(){ ...
- 使用canvas绘制时钟
使用canvas绘制时钟 什么使canvas呢?HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成.<canvas> 标签只是图 ...
- 使用html5 canvas绘制圆形或弧线
注意:本文属于<html5 Canvas绘制图形入门详解>系列文章中的一部分.如果你是html5初学者,仅仅阅读本文,可能无法较深入的理解canvas,甚至无法顺畅地通读本文.请点击上述链 ...
- 学习笔记:HTML5 Canvas绘制简单图形
HTML5 Canvas绘制简单图形 1.添加Canvas标签,添加id供js操作. <canvas id="mycanvas" height="700" ...
- 使用 HTML5 Canvas 绘制出惊艳的水滴效果
HTML5 在不久前正式成为推荐标准,标志着全新的 Web 时代已经来临.在众多 HTML5 特性中,Canvas 元素用于在网页上绘制图形,该元素标签强大之处在于可以直接在 HTML 上进行图形操作 ...
- 使用html5 canvas绘制图片
注意:本文属于<html5 Canvas绘制图形入门详解>系列文章中的一部分.如果你是html5初学者,仅仅阅读本文,可能无法较深入的理解canvas,甚至无法顺畅地通读本文.请点击上述链 ...
- html5 Canvas绘制图形入门详解
html5,这个应该就不需要多作介绍了,只要是开发人员应该都不会陌生.html5是「新兴」的网页技术标准,目前,除IE8及其以下版本的IE浏览器之外,几乎所有主流浏览器(FireFox.Chrome. ...
- [ZZ+CH] Html5 canvas+js 时钟
总之新Blog入驻以后,又开始老习惯,到处折腾自定义的空间,放些东西. 想起以前大一的时候做过一个Javascript的时间显示器,现在想做一个时钟,当然现在老奸巨猾,会先去看一看有前辈写过没. 前辈 ...
- 解决html5 canvas 绘制字体、图片与图形模糊问题
html5 canvas 绘制字体.图片与图形模糊问题 发生情况 多出现在高dpi设备,这意味着每平方英寸有更多的像素,如手机,平板电脑.当然很多高端台式电脑也有高分辨率高dpi的显示器. canva ...
随机推荐
- 详解struts.multipart.saveDir的临时文件路径
Struts2中的struts.multipart.saveDir主要是用来设置上传文件的临时目录,在不同的配置方式下,它的临时文件目录大有不同,好多人在设置后往往找不到这个临时目录在哪里,下面我就来 ...
- cocos2d-x CCSpriteBatchNode
转自:http://www.cnblogs.com/jiackyan/archive/2013/04/14/3019880.html 1.先说下渲染批次:这是游戏引擎中一个比较重要的优化指标,指的是一 ...
- 获取windows版本信息
procedure TForm1.Button1Click(Sender: TObject); Var OSVI:OSVERSIONINFO; begin OSVI.dwOSversi ...
- OpenCV Mat 类型定义和赋值
1.一般的Mat定义方法:cv::Mat M(height,width,<Type>),例: cv::Mat M(480,640,CV_8UC3); 表示定义了一个480行640列的矩阵, ...
- Android设备上i-jetty环境的搭建-手机上的web服务器
本文主要跟大家分享如何将一台Android设备打造成一个web服务器使用. 编译i-jetty 1.将源码download下来,http://code.google.com/p/i-jetty/dow ...
- linux 内核之旅
http://www.kerneltravel.net/?p=534 http://mp.weixin.qq.com/mp/homepage?__biz=MzI3NzA5MzUxNA==&hi ...
- 手工配置tomcat 解决一闪而过~
双击tomcat 目录下的bin目录下的startup.bat 如果看到Server startup in **** ms 显示在屏幕上证明你的配置都成功了 如果一闪而过,说明出错了.请在dos进入上 ...
- 深入研究Block捕获外部变量和__block实现原理
Blocks是C语言的扩充功能,而Apple 在OS X Snow Leopard 和 iOS 4中引入了这个新功能“Blocks”.从那开始,Block就出现在iOS和Mac系统各个API中,并被大 ...
- MySql添加用户,新建数据库,用户授权,删除用户,修改密码
转自:http://www.cnblogs.com/fly1988happy/archive/2011/12/15/2288554.html MySql中添加用户,新建数据库,用户授权,删除用户,修改 ...
- 2014年6月5日 深圳 IBM 安全解决方案会议通知
2014年6月5日 深圳 IBM 安全解决方案会议通知 http://gdtesting.com/news.php?id=191 时间: 2014年6月5日 地点: 深圳大中华喜来登 议程: IBM安 ...