深夜,用canvas画一个时钟
深夜,用canvas画一个时钟
这几天准备阿里巴巴的笔试,可以说已经是心力交瘁,自从阿里和蘑菇街的内推被刷掉之后,开始越来越怀疑起自己的能力来,虽然这点打击应该是微不足道的。毕竟校招在刚刚开始拉开帷幕,精彩的还在后头,内推不过,还有机会去秋招,这次秋招不过,还有明年的春招。但是明年的春招我可能等不起了,我迫不及待地需要一份工作,需要一份我向往的工作。
今天看书看到canvas部分,便用它来写了一个时钟,原理很简单,用context.arc(100, 100, 99, 0, Math.PI*2, false);绘制圆形作为表盘,context.fillText(i, textX, textY);绘制表盘上的数字,context.lineTo(secondsX, secondsY);绘制秒针,时针和分针的原理与此相同。接着就是正弦和余弦函数的运用。
开代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas时钟</title>
</head>
<body>
<canvas id="drawing" width="400" height="400"></canvas>
<script>
var draw = document.getElementById('drawing');
var time = null;
var seconds = 0;
var minutes = 0;
var hours = 0;
var secondsAngle = 0;
var minutesAngle = 0;
var hoursAngle = 0;
var secondsX = 0;
var secondsY = 0;
var minutesX = 0;
var minutesY = 0;
var hoursX = 0;
var hoursY = 0;
if (draw.getContext) {
var context = draw.getContext('2d');
// 绘制外圆
context.arc(100, 100, 99, 0, Math.PI*2, false);
// 绘制内圆
context.moveTo(194, 100);
context.arc(100, 100, 94, 0, Math.PI*2, false);
context.stroke();
context.font = "bold 14px Arial";
context.textAlign = 'center';
context.textBaseline = 'middle';
// context.fillText('12', 100, 20);
var i = 1;
var textAngle = 0;
var textX = 0;
var textY = 0;
for (i = 1; i < 13; i++) {
textAngle = i * (Math.PI*2/12);
textY = 100 - 83*Math.cos(textAngle);
textX = 100 + 83*Math.sin(textAngle);
context.fillText(i, textX, textY);
}
drawClock();
setInterval(drawClock, 1000);
}
function getTime() {
var date = new Date();
var res = {};
res.seconds = date.getSeconds();
res.minutes = date.getMinutes();
res.hours = date.getHours();
return res;
}
function drawClock() {
// 开始路径
context.beginPath();
context.clearRect(35, 35, 130, 130);
time = getTime();
seconds = time.seconds;
minutes = time.minutes;
hours = time.hours > 12 ? time.hours-12: time.hours;
// 绘制秒针
// context.rePaint();
context.moveTo(100, 100);
secondsAngle = (seconds/60)*Math.PI*2;
secondsY = 100 - 65*Math.cos(secondsAngle);
secondsX = 100 + 65*Math.sin(secondsAngle);
context.lineTo(secondsX, secondsY);
// 绘制分针
context.moveTo(100, 100);
minutesAngle = ((minutes*60+seconds)/(60*60))*Math.PI*2;
minutesY = 100 - 50*Math.cos(minutesAngle);
minutesX = 100 + 50*Math.sin(minutesAngle);
context.lineTo(minutesX, minutesY);
// 绘制时针
context.moveTo(100, 100);
hoursAngle = ((hours*60*60+minutes*60+seconds)/(12*60*60))*Math.PI*2;
hoursY = 100 - 35*Math.cos(hoursAngle);
hoursX = 100 + 35*Math.sin(hoursAngle);
context.lineTo(hoursX, hoursY);
// 描边路径
context.stroke();
}
</script>
</body>
</html>
深夜,用canvas画一个时钟的更多相关文章
- 玩转html5(四)----使用canvas画一个时钟(可以动的哦!)
先给个效果图,我画的比较丑,大家可以自己美化一下, 直接上代码: <!DOCTYPE html> <meta charset="utf-8"> <ht ...
- canvas画一个时钟
效果图如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- 用canvas画一个时钟
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 10分钟,利用canvas画一个小的loading界面
首先利用定义下canvas得样式 <canvas width="1024" height="720" id="canvas" styl ...
- 用Canvas画一个刮刮乐
Canvas 通过 JavaScript 来绘制 2D图形.Canvas 是逐像素进行渲染的.开发者可以通过javascript脚本实现任意绘图.Canvas元素是HTML5的一部分,允许脚本语言动态 ...
- 利用canvas画一个实时时钟
先放一张效果图: 下面是源代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...
- 用canvas绘制一个时钟
实现一个时钟的绘制和时间的显示 一,首先是页面的搭建html部分以及一点点的css代码,因为css这块用的比较少,所以就没有单独出来: <!DOCTYPE html> <html l ...
- 通过H5的新标签canvas做出一个时钟的全过程,希望对初学者有帮助
最近学习了H5中的一个新标签canvas并且用它做出了一个时钟,最下面是成品图像,还不错吧,这只是我学习中的一个小demo,做得有点粗糙,但终究是做出来了,以后再写自己的网页主页再做一个好看点放上去. ...
- html5入门:教你用canvas写一个时钟
今天的时间比较充裕,心血来潮,为大家分享一个html5的小例子,希望对刚学html5或者是没学html5正准备学的“童鞋们”展示一个小案例,希望对你们的学习有帮助!高手嘛!请跳过吧! 好了,闲话少数, ...
随机推荐
- 将四个BYTE数值转换成IEEE754标准的浮点数(两种方法:用Addr函数取字节数字的首地址,或者用Absolute关键字)
在工作中,经常使用到IEEE754格式的数据.IEEE754格式的数据占四个字节,好像Motorola格式和Intel格式的还不一样. 由于工作中很少和他打交道(使用的软件内部已经处理),就没太在意. ...
- CCNA实验(9) -- Frame Relay
帧中继的一些特点:1.中小企业常用的广域网线路2.通信费用较低3.配置较为复杂 1.将Cisco路由器配置为帧中继交换机2.帧中继基本配置.帧中继映射3.在帧中继的链路上运行RIPv24.帧中继的多点 ...
- POJ 3261 Milk Patterns(后缀数组+二分答案)
[题目链接] http://poj.org/problem?id=3261 [题目大意] 求最长可允许重叠的出现次数不小于k的子串. [题解] 对原串做一遍后缀数组,二分子串长度x,将前缀相同长度超过 ...
- javascript数字验证输入
javascript数字验证功能: <html> <body> <p>请输入数字.如果输入值不是数字,浏览器会弹出提示框.</p> <input ...
- 新浪微博 2.4sdk 一闪而过
解决方法,保持 ios应用中的 build id和 开放平台中填写的一致
- ios即时通讯客户端开发之-mac上基于XMPP的聊天客户端开发环境搭建
1.搭建服务器 - 安装顺序 - (mysql->openfire->spark) 数据库:mysql 服务器管理工具: openfire 测试工具: spark mysql 安装 h ...
- ##DAY2 UILabel、UITextField、UIButton、UIImageView、UISlider
##DAY2 UILabel.UITextField.UIButton.UIImageView.UISlider #pragma mark ———————UILabel——————————— UILa ...
- Ajax 生成流文件下载 以及复选框的实现
JQuery的ajax函数的返回类型只有xml.text.json.html等类型,没有“流”类型,所以我们要实现ajax下载,不能够使用相应的ajax函数进行文件下载.但可以用js生成一个form, ...
- LintCode-比较字符串
题目描述: 比较两个字符串A和B,确定A中是否包含B中所有的字符.字符串A和B中的字符都是 大写字母 注意事项 在 A 中出现的 B 字符串里的字符不需要连续或者有序. 样例 给出 A = " ...
- 命令查询分离原则Command-query separation principle
在UML和模式应用一书中,发送给Die的roll消息之后跟随着第二个消息getFaceValue用于提取其新的faceValue,特别是:roll()方法是void的,没有返回值,例如: public ...