用canvas绘制一个简易时钟
在见识了html5中canvas的强大,笔者准备制作一个简易时钟。
下面就是成果啦,制作之前我们先分析一下,绘制一个时钟需要做哪些准备。

一 、
1.首先这个时钟分为表盘,指针(时针,分针,秒针)和数字三部分。
2.表盘是个圆,这个简单。
3.绘制指针时,需要先获取到系统时间,然后找到时间和角度的关系。
4.然后利用画圆函数,把起始和终点设为同一角度,即可画出以圆心为起点的射线(指针)了。
二、
接下来,我们再分析一下,绘制时钟需要用到的函数。
1.arc(x, y, r, start, stop)
x, y, r : 分别是圆的圆心坐标和半径。
start:起始角,以弧度计
stop : 结束角, 以弧度计
这里涉及到弧度的问题。角度和弧度的关系式:指针的角度 * Math.PI / 180 = 弧度。
三、
现在就剩下如何利用获取到的系统时间转化为 函数所需要的角度(弧度)了。
时钟一圈分为12个小时,60分钟,60秒。所以30°一小时,6°一分钟, 6°一秒。
理所应当的 指针的角度 = 时间 * 对应的角度 即可得到我们所需的时间,但是我们这个计算方式是以0°在时钟的12点钟为基准的。
而canvas里的0°的地方是在时钟的三点钟方向。(一定要注意这个问题)。
而且以右为X轴,以下为Y轴的正方向。
所以还需要减去一个90 才是我们需要的结果
指针的角度 = 时间 * 对应的角度 - 90
另外 为了模拟真实的时针的走动(即分针走一分钟,时针也跟着走一点点,而不是走完60分钟时针才走一格),
只需要在计算时针角度的时候加上分钟的一半(60/2=30,刚好是时针一格的度数)。
四、上代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<canvas id="can">
当前浏览器不支持!
</canvas>
<script>
var x1 = 300;
var y1 = 300; //时钟圆心位置
var c = document.getElementById("can");
var ca = can.getContext("2d"); c.width = 400;
c.height = 400; //画布大小 setInterval(function() {
ca.clearRect(0, 0, 400, 400);
rtime(x1, y1);
},50) //让时钟走起来 function rtime(x, y) {
var da1 = new Date();
var h = parseInt(da1.getHours());
var m = parseInt(da1.getMinutes());
var s = parseInt(da1.getSeconds()); //获取系统时间 var h1 = (h * 30 - 90 + m / 2) * Math.PI / 180;
var m1 = (m * 6 - 90) * Math.PI / 180;
var s1 = (s * 6 - 90) * Math.PI / 180; //转化为函数所需要的弧度 ca.beginPath();
ca.lineWidth = 6;
ca.arc(x, y, 70, 0, 2*Math.PI);
ca.stroke(); //绘制表盘 ca.lineWidth = 1;
ca.font = "18px";
ca.strokeText("12",x-9, y-50);
ca.strokeText("6",x-3, y+60);
ca.strokeText("9",x-60, y+5);
ca.strokeText("3",x+55, y+5); //绘制数字 ca.beginPath();
ca.lineWidth = 3;
ca.lineCap="round";
ca.moveTo(x,y);
ca.arc(x, y, 35, h1, h1);
ca.stroke(); //绘制时针 ca.beginPath();
ca.lineWidth = 2;
ca.lineCap="round";
ca.moveTo(x,y);
ca.arc(x, y, 45, m1, m1);
ca.stroke(); //绘制分针 ca.beginPath();
ca.lineWidth = 1;
ca.lineCap="round";
ca.moveTo(x,y);
ca.arc(x, y, 55, s1, s1);
ca.stroke(); //绘制秒针
} </script>
</body>
</html>
以上就是用canvas绘制时钟的所有内容啦,有兴趣的朋友们,可以在此基础上绘制出各种各样的时钟啦。
用canvas绘制一个简易时钟的更多相关文章
- 使用canvas绘制一个时钟
周末学习canvas的一些基础功能,顺带写了一个基础的时钟.现在加工一下,做的更好看一点,先放上效果图: 谈一些自己的理解: (1).要绘制一个新的样式(不想被其他样式影响,或者影响到其他样式),那么 ...
- 通过Canvas + JS 实现简易时钟实战
最近通过各种渠道学习了下html5中的canvas元素,为了练练手就随手写了一个简易的时钟.时钟本身不复杂,没有使用图片进行美化,下面就与大家分享一下具体的代码: 这是最终实现的效果: 部分的启发点来 ...
- HTML5 在canvas绘制一个矩形
笔者:本笃庆军 原文地址:http://blog.csdn.net/qingdujun/article/details/32930501 一.绘制矩形 canvas使用原点(0,0)在左上角的坐标系统 ...
- Canvas绘制一个大鱼喂小鱼的游戏
Canvas是HTML5中的一部分,强大的API足以让我们绘制我们任意想绘制的东西.利用Canvas的基础学习以及JavaScript面向对象的思想绘制一个小游戏,下面是源码地址https://git ...
- iOS 绘制一个表盘时钟,秒针效果可以“扫秒/游走”
最近自己 也尝试写了一个表盘时钟,初衷源于等车时候一个老奶奶问时间,我打开手机,时间数字对我来说相对敏感,但是老奶奶是看不清的,我想识别 还是看表盘 老远 看时针分针角度就可以识别当前时间. 于是我想 ...
- 用canvas绘制一个时钟
实现一个时钟的绘制和时间的显示 一,首先是页面的搭建html部分以及一点点的css代码,因为css这块用的比较少,所以就没有单独出来: <!DOCTYPE html> <html l ...
- Canvas 绘制一个像素风电子时钟
想法是在 Canvas 上绘制由小方块组成的数字. 第一步是实现绘制小方块的方法,先画出一个边长为 5 的 10x10 个方块,使用两个 for 循环很简单就能完成. for (let i = 0; ...
- 利用canvas画一个实时时钟
先放一张效果图: 下面是源代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...
- 用canvas写一个简易画图工具
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
随机推荐
- 转载《centos6安装nginx最详细步骤》
出处:https://www.cnblogs.com/hltswd/p/6956264.html 第一步:在centos下面下载 nginx wget http://nginx.or ...
- NOIp 2018 货币系统 贪心
题目描述 在网友的国度中共有 nnn 种不同面额的货币,第 iii 种货币的面额为 a[i]a[i]a[i],你可以假设每一种货币都有无穷多张.为了方便,我们把货币种数为 nnn.面额数组为 a[1. ...
- 勤哲excel服务器WEB网页环境搭建问题解决
因为客户希望在浏览器上使用勤哲的功能,因此希望大家勤哲excel服务器的web环境. 他们用的是勤哲2010版,需要装到64位环境下.在搭建的时候,遇到2个主要问题. 问题1:编译器错误消息: BC3 ...
- 用勤哲excel服务器开发设计燃烧器生产行业ERP
J公司是一家专业从事设计.制造.生产及销售各类燃油燃气燃烧设备和各类冶金燃烧装置的专业公司.2011年随着企业的发展,原来手工操作模式已经很难应付日益增长的工作量. J公司希望通过软件管理实现以下几个 ...
- Redis学习笔记(4)—— Jedis入门
一.Jedis介绍 Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如Java.C.C#.C++.php.Node.js.Go等. 在官方网站里列的一些Java客户端,有jedi ...
- 面向对象之-------------------永不停机的ATM
import os class Account: def __init__(self, username, password, money=0): self.username = username s ...
- python 文件与异常
####文件### r: -只能读 不能写 -读取文件不存在,是会报错 r+: - 可以执行读写操作; - 文件不存在, 报错: w: -只能写,不能读 -会清空文件内容 -文件不存在,会新建文件 w ...
- 单元测试mock框架——jmockit实战
JMockit是google code上面的一个java单元测试mock项目,她很方便地让你对单元测试中的final类,静态方法,构造方法进行mock,功能强大.项目地址在:http://jmocki ...
- Dev GridView RowCellClick事件与MouseDown事件
GridView处于可编辑状态,左键点击默认为“进入编辑”. 将GridView的OptionsColumn.AllowEdit设置为false后左键可触发RowCellClick.但有时候,既希望G ...
- etcd介绍
etcd是一个开源的.分布式的键值对数据存储系统,提供共享配置.服务的注册和发现. etcd与zookeeper相比算是轻量级系统.etcd的raft比zookeeper的paxos简单. 我们用et ...