深夜,用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正准备学的“童鞋们”展示一个小案例,希望对你们的学习有帮助!高手嘛!请跳过吧! 好了,闲话少数, ...
随机推荐
- ios post空文件流导致400错误
- python import 自己的包
在写python时,有时候写的一个python文件可能需要被其他python文件所用,那么可以用导入包 import 的 方式: 1.自己写的包放到哪里? >>> import sy ...
- How can I get an object's absolute position on the page in Javascript?
How can I get an object's absolute position on the page in Javascript? How can I get an object's abs ...
- STC15?MSP430?ARM?DSP?
自从大学毕业以来,发现属于自己的时间越来越少,每天忙于工作,导致在大学学到的东西都好生疏,特别是大一刚开始学的模电,单片机等,现在才慢慢的抓起来,然后在这个多核处理器流行的时代,单片机貌似快过时了,但 ...
- iOS现有工程 集成 Cordova/Ionic
首先, 新建 Cordova 项目就不说了, 步骤: http://ionicframework.com/getting-started/ , cordova生成的项目用cdv_project称呼, ...
- Windows下安装Apache2.4+PHP5.4+Mysql5.7
注:文中所写的安装过程均在Win7 x86下通过测试,提供的百度云下载链接均为32位安装包,如需Apache和PHP的64位安装包请从官网下载! 一.安装Apache2.4.12 Apache官方下载 ...
- ASP.NET MVC5 学习笔记-4 OWIN和Katana
1. Owin OWIN全名:Open Web Interface for .NET. 它是一个说明,而非一个框架,该声明用来实现Web服务器和框架的松耦合.它提供了模块化.轻量级和便携的设计.类似N ...
- 整理网站优化(SEO)的方案
首先,我们来确定一下seo方案的定义是什么,所谓seo方案是指针对于某个网站,在完成了解熟悉的情况下,结合自身的一套seo优化方法来制定完成符合这个网站seo推广思路和策略.接下来就了解一下新手seo ...
- MVC-05 Model(2)
五.使用Code First数据库迁移 当Entity Framework Code First的数据模型发生异动时,默认会引发一个System.InvalidOpertaionException异常 ...
- 《刺杀金正恩》1080p全高清无水印,附中文字幕 bt种子下载,附字母(百度网盘/360云盘)
<刺杀金正恩>1080p全高清无水印,附中文字幕下载(百度网盘/360云盘) 种子和字幕下载地址: thunder://QUFlZDJrOi8vfGZpbGV8JUU5JTg3JTg3JU ...