轻松实现HTML5时钟(分享下自己对canvas的理解,原来没你想像的那么难哦)

Hey,guys! 让我们一起用HTML5实现一下简易时钟吧!

接触canvas时, 我突然有一种非常熟悉的感觉------canvas的部分的功能其实和Photoshop中的 钢笔工具 是一样的。所以,如果你对 PS里的 钢笔工具 运用自如的话,恭喜你,canvas你将很快上手~~

说下对HTML5中canvas的理解,canvas翻译成中文就是画布,顾名思义,canvas当然是用来作画的啦~~

作画嘛,其实现的思想 与 photoshop 基本上是一样的~~,只不过photoshop可以用可视化工具, 而来到HTML5 / JS 就是用代码自己手敲而已。

所以总结一下: canvas 是用来画画的!至于你想画点什么,就是你自己的事咯!

canvas对象中getContext(‘2d‘),就相当于是 PS里的 钢笔工具下面说一下它们对应关系:

beginPath---->  开始画路径

moveTo ----->  路径开始点

lineTo ------->  拉直线路径到甘个点

clothPath --->  闭合路径

stroke ------>  描边路径(这也是为什么当lineWidth设为大于1px时,如10px,它是从中间向两边各分一半的原因,PS里的 钢笔工具 就是这样的)

fill----------->  填充路径

bezierCurveTo 和 quadraticCurveTo 更是 PS里的 钢笔工具 的精髓之处!

等等等等......

好,如果你感兴趣的话,可以去折腾一下 PS里的 钢笔工具 哦,相信会对你理解canvas对象中getContext(‘2d‘)的属性和方法有一定帮助

下面是HTML5时钟的实现代码:

  1 <!DOCTYPE HTML>
  2 <html>
  3 <head>
  4 <meta http-equiv="Content-Type" content="textml; charset=utf-8">
  5 <title>clock by html5</title>
  6 <style>
  7 body {
  8     background: #333;
  9 }
 10
 11 #canvas1 {
 12     display: block;
 13     width: 400px;
 14     margin: 100px auto;
 15 }
 16
 17 </style>
 18
 19 <script>
 20 window.onload = function (){
 21
 22     var oC = document.getElementById(‘canvas1‘);
 23
 24     var oCtx = oC.getContext(‘2d‘);
 25     var x = 0;    //圆心x
 26     var y = 0;    //圆心y
 27     var r = 0;    //圆心r
 28     initialize();
 29     setInterval(DrawUpdate,1000);
 30
 31     function initialize(){
 32
 33         x = 200;    //圆心x
 34         y = 200;    //圆心y
 35         r = 150;    //圆心r
 36         oCtx.strokeStyle = ‘#1ec1e4‘;
 37         oCtx.fillStyle = ‘#333‘;
 38
 39         //画秒刻度
 40         for(var i=0; i<60; i++){
 41             oCtx.beginPath();
 42             oCtx.moveTo(x, y);
 43             oCtx.arc(x, y, r, i*6*Math.PI/180, (i+1)*6*Math.PI/180);
 44             oCtx.stroke();
 45         }
 46         oCtx.closePath();
 47
 48         oCtx.beginPath();
 49         oCtx.arc(x, y, r-8, 0, 2*Math.PI);
 50         oCtx.closePath();
 51         oCtx.fill();
 52
 53         //画分钟刻度
 54         oCtx.lineWidth = 2;
 55         oCtx.beginPath();
 56         for(var i=0; i<12; i++){
 57             oCtx.moveTo(x, y);
 58             oCtx.arc(x, y, r, i*30*Math.PI/180, i*30*Math.PI/180);
 59             oCtx.stroke();
 60         }
 61         oCtx.closePath();
 62
 63         /*
 64         在DrawUpdate中可以实现,就没必要了
 65         oCtx.beginPath();
 66         oCtx.arc(x, y, r-12, 0, 2*Math.PI);
 67         oCtx.closePath();
 68         oCtx.fill();
 69         oCtx.closePath();*/
 70
 71         DrawUpdate();
 72     }
 73
 74     //负责更新时间
 75     function DrawUpdate(){
 76
 77         var iSecValue = 0;    //秒针对应的刻度
 78         var iMinValue = 0;    //分针对应的刻度
 79         var iHourValue = 0;    //时针对应的刻度
 80
 81         var oDate = new Date();
 82         var iSec = oDate.getSeconds();
 83         var iMin = oDate.getMinutes();
 84         var iHour = oDate.getHours();
 85         iSecValue = (- 90 + iSec*6) * Math.PI/180;
 86         iMinValue = (- 90 + iMin*6 + iSec/10)* Math.PI/180;
 87         iHourValue = (- 90 + iHour*30 + iMin/2)* Math.PI/180;
 88
 89         //遮罩,覆盖原来的时间
 90         oCtx.beginPath();
 91         oCtx.arc(x, y, r-12, 0, 2*Math.PI);
 92         oCtx.closePath();
 93         oCtx.fill();
 94
 95         //画时针
 96         oCtx.lineWidth = 3;
 97         oCtx.beginPath();
 98         oCtx.moveTo(x, y);
 99         oCtx.arc(x, y, r*0.5, iHourValue, iHourValue);
100         oCtx.stroke();
101
102         //画分针
103         oCtx.lineWidth = 2;
104         oCtx.beginPath();
105         oCtx.moveTo(x, y);
106         oCtx.arc(x, y, r*0.8, iMinValue, iMinValue);
107         oCtx.stroke();
108
109         //画秒针
110         oCtx.lineWidth = 1;
111         oCtx.beginPath();
112         oCtx.moveTo(x, y);
113         oCtx.arc(x, y, r*0.9, iSecValue, iSecValue);
114         oCtx.stroke();
115     }
116 }
117 </script>
118
119 </head>
120
121 <body>
122 <canvas id="canvas1" width="400" height="400">Hey,guys!您的浏览器版本也太低了吧,赶紧升级下吧,推荐Google Chrome哦!</canvas>
123 </body>
124 <html>

欢迎拍砖,如果bug, 请留言提醒, 觉得好帮忙点下 推荐哦~~--------------------------------------------------------------------------------------------------------------------------------------------↓

                                                                                                    ↓
                                                                                                  ↓
                                                                                                  ↓
                                                                                                  ↓
                                                                                                  ↓

轻松实现HTML5时钟(分享下自己对canvas的理解,原来没你想像的那么难哦)

时间: 2024-10-11 03:21:05

轻松实现HTML5时钟(分享下自己对canvas的理解,原来没你想像的那么难哦)的相关文章

轻松搞定Ajax(分享下自己封装ajax函数,其实Ajax使用很简单,难是难在你得到数据后来怎样去使用这些数据)

hey,guys!今天我们一起讨论下ajax吧!此文只适合有一定ajax基础,但还是模糊状态的同志,当然高手也可以略过~~~ 一.概念 Ajax(Asynchronous Javascript + XML(异步JavaScript和XML )) 二.效果 实现无刷新效果,向后台异步的取数据(不是只有AJAX才能实现这样的效果的哦,如img , script标签中的src属性也可以实现一样的效果,可以自己尝试一下哦) 三.本质 可能我们在学习过程中会觉得ajax好难,我也是这样过来的,我觉得是我们

14款超时尚的HTML5时钟动画

时钟动画在网页应用中也非常广泛,在一些个人博客中,我们经常会看到一些相当个性化的HTML5时钟动画.今天我们向大家分享了14款形态各异的超时尚HTML5时钟动画,其中有圆盘时钟.3D时钟.个性化时钟等,强大的HTML5为时钟动画增添了不少精彩,希望能给大家带来帮助. 1.可爱的CSS3圆盘时钟动画 今天要分享的也是一款可爱的CSS3圆盘时钟动画,时钟背景是乳白色的,显得非常干净,另外,时钟也可以和你本地的时候保持同步. 在线演示 源码下载 2.HTML5 SVG圆盘时钟动画 5种时钟样式 今天我

分享下多年积累的对JAVA程序员成长之路的总结

http://blog.csdn.net/zhongzelin/article/details/8643269我也搞了几年JAVA了,由于一向懒惰,没有成为大牛,只是一普通程序猿,不爱玩社交网站,不爱玩微博,唯独喜欢百度贴吧,潜水很久了,手痒来给新人分享下从新手成长为老鸟的已见,也刷刷存在感,应该不比曝照差吧. 首先初识语法的阶段,必须要学会怎么操作对象,操作if和for,操作list set map,然后是线程.IO和jdbc什么的,其余的,若是一时不理解,可以后边需要时再学.这阶段完了,你可

14款形态各异的超时尚HTML5时钟动画

14款超时尚的HTML5时钟动画(附源码)   时钟动画在网页应用中也非常广泛,在一些个人博客中,我们经常会看到一些相当个性化的HTML5时钟动画.今天我们向大家分享了14款形态各异的超时尚HTML5时钟动画,其中有圆盘时钟.3D时钟.个性化时钟等,强大的HTML5为时钟动画增添了不少精彩,希望能给大家带来帮助. 1.可爱的CSS3圆盘时钟动画 在线演示:http://www.html5tricks.com/demo/css3-circle-clock/index.html 源码下载:http:

毕业一年,分享下个人的找工作的体会

应届生毕业季选择了一家国企IT中心干运维工作,工作一年觉得工作没什么挑战性,直接裸辞了,找了两个星期工作,面了5家公司,收到4个邀请 昨天正式入职第二家公司,工资给我开了年薪120K,当然还有其他些福利,薪资方面基本符合个人预期(10K-12K/月) 这份工作是做基础软件开发(开发给程序员使用的工具和软件),个人觉得这份工作很有挑战性毅然选择了这家公司 今天项目经理找我谈心,谈到他为什么会招我这个第一年工作中都没写过一行代码的人进这个项目组,核心的意思是他愿意提供给一位有潜力的年轻人一个机会,让

分享下使用 svn,测试服务器代码自动更新、线上服务器代码手动更新的配置经验

分享下使用 svn,测试服务器代码自动更新.线上服务器代码手动更新的配置经验 利用SVN的POST-COMMIT钩子自动部署代码 Linux SVN 命令详解 Linux SVN 命令详解2

用hoverclock插件实现HTML5时钟

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>用hoverclock插件实现HTML5时钟</title> <link rel="stylesheet" hr

项目做了不少,我比较有感觉的2个项目,分享下

最近,我做了2个比较有意思的项目,都是自己单独完成的,感觉挺有成就感的.我分享下.呵呵. 一个电信运营支撑系统 这个系统的简介: 开发环境 Windows,Eclipse,Java系统的描述:实现了该系统的用户登录信息采集模块,AAA服务器定时采集用户上线与下线信息,并将完整信息发送给中央服务器,不完整信息进行备份,中央服务器对其收到的信息进行入库,不完整信息进行备份.职责和业绩: 这个项目是在上海杰普公司培训的时候做的,没有实现上线. 第二个呢,是一个绿子橄榄油网,呵呵,一个站点来的,也是单独

分享下速卖通api的java的入门代码

package com.print.base; import java.io.*; import java.math.BigInteger; import java.net.URL; import java.net.URLEncoder; import java.util.*; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import net.sf.json.JSONArray; import net.sf.j