最近准备把自己的博客装修一下,首先,先为自己设计一个时钟吧,希望博客园能够尽快发放给我使用js的权限!

自从看见了苹果设计的那款因为侵权而赔钱了时钟,我就决定我的时钟一定是要参考这个来设计了!

不得不说,这是一个非常酷的设计!

准备工作

首先,定义一个Canvas

  1. <div id="mineClock" style="position:relative;margin:0px auto">
  2. <canvas id="canvas" style="background-color:#d7d7d7" width="244" height="300">您的浏览器不支持Canvas</canvas>
  3. </div>

开始绘制

绘制此时钟采取的思路是,利用js获取时间,然后将各个时间作为变量设置时针、分针、秒针的旋转角度以及位置,每秒钟刷新一次,然后就能得到一个很酷的模拟时钟!

  1. <script>
  2. var clock = document.getElementById('canvas');
  3. var ctx = clock.getContext('2d');
  4. function drawTime() {
  5. ctx.clearRect(0, 0, 244, 300);
  6. var date = new Date(); //获取当前时间
  7. var year = date.getFullYear();
  8. var month = date.getMonth();
  9. var day = date.getDate();
  10. var week = date.getDay();
  11. var hour = date.getHours();
  12. var min = date.getMinutes();
  13. var sec = date.getSeconds();
  14.  
  15. hour = hour + min / 60;
  16. hour = hour > 12 ? hour - 12 : hour;
  17.  
  18. var width = 244;
  19. var height = 280;
  20. var dot = { //时钟中心
  21. x: width / 2,
  22. y: width / 2,
  23. radius: 4
  24. }
  25. var radius = 115;
  26. var maxBorderWidth = 8;
  27. var minBorderWidth = 2;
  28.  
  29. //绘制年月日
  30. ctx.fillStyle = "#000";
  31. ctx.font = "30px Lucida Sans Unicode";
  32. month = eval(month + 1); //设置月份,月份得到的值为0·11,所以要加一得到实际值
  33. var message = year + " 年" + month + " 月" + day;
  34. ctx.fillText(message, 7, height);
  35.  
  36. //绘制时钟中心点
  37. ctx.lineWidth = maxBorderWidth;
  38. ctx.beginPath();
  39. ctx.fillStyle = "#e2e2e2";
  40. ctx.arc(dot.x, dot.y, radius, 0, 2 * Math.PI, true);
  41. ctx.fill();
  42. ctx.closePath();
  43.  
  44. //绘制时刻度、分刻度
  45.  
  46. for (var i = 0; i < 60; i++) {
  47.  
  48. ctx.save();
  49. var pointLong;
  50. if (i % 5 == 0) {
  51. ctx.lineWidth = maxBorderWidth;
  52. pointLong = 25;
  53. }
  54. else {
  55. ctx.lineWidth = minBorderWidth;
  56. pointLong = 12;
  57. }
  58. ctx.strokeStyle = "#000";
  59. ctx.translate(dot.x, dot.y);
  60. ctx.rotate(i * 6 * Math.PI / 180);
  61. ctx.beginPath();
  62. ctx.moveTo(0, -radius + maxBorderWidth);
  63. ctx.lineTo(0, -radius + maxBorderWidth + pointLong);
  64. ctx.closePath();
  65. ctx.stroke();
  66. ctx.restore();
  67. }
  68. //绘制时针
  69. ctx.save();
  70. ctx.lineWidth = maxBorderWidth;
  71. ctx.translate(dot.x, dot.y);
  72. ctx.rotate(hour * 30 * Math.PI / 180);
  73. ctx.beginPath();
  74. ctx.moveTo(0, -55);
  75. ctx.lineTo(0, 25);
  76. ctx.closePath();
  77. ctx.stroke();
  78. ctx.restore();
  79.  
  80. //绘制分针
  81. ctx.save();
  82. ctx.lineWidth = maxBorderWidth;
  83. ctx.translate(dot.x, dot.y);
  84. ctx.rotate(min * 6 * Math.PI / 180);
  85. ctx.beginPath();
  86. ctx.moveTo(0, -97);
  87. ctx.lineTo(0, 25);
  88. ctx.closePath();
  89. ctx.stroke();
  90. ctx.restore();
  91. //绘制秒针
  92. ctx.save();
  93. ctx.strokeStyle = "red";
  94. ctx.lineWidth = minBorderWidth;
  95. ctx.translate(dot.x, dot.y);
  96. ctx.rotate(sec * 6 * Math.PI / 180);
  97. ctx.beginPath();
  98. ctx.moveTo(0, -75);
  99. ctx.lineTo(0, 25);
  100. ctx.closePath();
  101. ctx.stroke();
  102. ctx.beginPath();
  103. ctx.fillStyle = '#D6231C';
  104. ctx.arc(0, -75, 6, 0, 2 * Math.PI, true); //绘制秒针针尖的小圆点
  105. ctx.fill();
  106. ctx.closePath();
  107. ctx.restore();
  108. //装饰时钟中心 两个小圆叠加
  109. ctx.beginPath();
  110. ctx.fillStyle = '#982127';
  111. ctx.arc(dot.x, dot.y, dot.radius, 0, 2 * Math.PI, true);
  112. ctx.fill();
  113. ctx.closePath();
  114.  
  115. ctx.beginPath();
  116. ctx.fillStyle = '#D6231C';
  117. ctx.arc(dot.x, dot.y, 2, 0, 2 * Math.PI, true);
  118. ctx.fill();
  119. ctx.closePath();
  120. //再时钟上添加签名
  121. ctx.fillStyle = "#000";
  122. ctx.font = "15px Comic Sans MS";
  123. ctx.fillText("Chal Mine", dot.x-30, dot.y+50);
  124. }
  125. setInterval(drawTime, 1000); //每秒刷新
  126. </script>

如果你拥有了博客园的js权限,那么你就可以将此时钟添加到博客园的侧边栏了!

Html5时钟的实现的更多相关文章

  1. 用hoverclock插件实现HTML5时钟

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

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

    Hey,guys! 让我们一起用HTML5实现一下简易时钟吧! 接触canvas时, 我突然有一种非常熟悉的感觉------canvas的部分的功能其实和Photoshop中的 钢笔工具 是一样的.所 ...

  3. 14款超时尚的HTML5时钟动画

    时钟动画在网页应用中也非常广泛,在一些个人博客中,我们经常会看到一些相当个性化的HTML5时钟动画.今天我们向大家分享了14款形态各异的超时尚HTML5时钟动画,其中有圆盘时钟.3D时钟.个性化时钟等 ...

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

    14款超时尚的HTML5时钟动画(附源码)   时钟动画在网页应用中也非常广泛,在一些个人博客中,我们经常会看到一些相当个性化的HTML5时钟动画.今天我们向大家分享了14款形态各异的超时尚HTML5 ...

  5. 纯Shading Language绘制HTML5时钟

    今天是2014年的最后一天,这个时刻总会让人想起时钟,再过几个小时地球人都要再老了一岁,于是搞个HTML5版的时钟就是我们今天要完成的任务,实现HTML5的时钟绘制一般会采用三种方式,第一种采用CSS ...

  6. 使用HTML5制作时钟

    之前看到别人用HTML5制作时钟,自己也写了一个,这是很久以前写的了,没有注释,现在自己看都晕了(注释的重要性就体现在这边了),找时间加上注释,让自己和别人都比较好理解. <!DOCTYPE h ...

  7. HTML5 Canvas 时钟

    1. [图片] QQ截图20120712130049.png ​2. [代码][HTML]代码 <!DOCTYPE html><html lang="en" &g ...

  8. 30几个HTML5经典动画应用回顾 让你大饱眼福

    周末大放送,让我们来回顾一下HTML5经典动画应用,一定会让你大饱眼福. 1.HTML5 Canvas画板画图工具 可定义笔刷和画布 HTML5 Canvas还有一个比较实用的应用,那就是网络画板,这 ...

  9. 16款最佳HTML5超酷动画演示及源码

    1.HTML5/CSS3图片选择动画 可选择多张图片 之前我们已经分享过几款很酷的HTML5图片特效,像HTML5 3D图片折叠特效.HTML5 3D旋转图片相册等应用.今天我们来分享一款既炫酷又实用 ...

随机推荐

  1. Struts2.x jsp页面无法使用jsp:forward跳转到action

    问题:使用<jsp:forward page="test"></jsp:forward>语句无法跳转到test所对应的action. 解决办法:在web.x ...

  2. Android实例-MediaPlayer播放音乐和视频(XE8+小米2)

    结果: 1.播放视频需要手动放入MediaPlayerControl1控件,设置MediaPlayerControl1.MediaPlayer := MediaPlayer1; 2.播放声音文件正常, ...

  3. 安森美电量计采用内部电阻跟踪电流--电压HG-CVR

    http://www.dianyuan.com/article/34608.html LC709203F应用:用于便携式设备单节锂电池的智能电量计http://files.cnblogs.com/fi ...

  4. [Objective-c 基础 - 2.4] 多态

    A.对象的多种形态 1.父类指针指向子类对象 2.调用方法的时候,会动态监测真实地对象的方法 3.没有继承,就没有多态 4.好处:用一个父类指针可以指向不同的子类对象 5.强制转换类型之后就能使用子类 ...

  5. 怎样在Java中实现基本数据类型与字符之间的转换

    摘要:在我们对Java的学习当中数据类型之间的转换,是我们常见的事,我们也都知道基本数据类型之间有自动转换和强制转换,在int   . short  . long .float .double之间的转 ...

  6. in和exists的区别与SQL执行效率

    in和exists的区别与SQL执行效率最近很多论坛又开始讨论in和exists的区别与SQL执行效率的问题,本文特整理一些in和exists的区别与SQL执行效率分析 SQL中in可以分为三类: 1 ...

  7. linux搜索jar内容

    linux搜索  spring-beans-2.5.6.jar  内容 1.jar tvf spring-beans-2.5.6.jar -c  创建新的归档文件 -t  列出归档目录 -x  解压缩 ...

  8. BZOJ 1934: [Shoi2007]Vote 善意的投票 最小割

    1934: [Shoi2007]Vote 善意的投票 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnl ...

  9. 笔记本禁用自带键盘攻略-------针对shift默认按下的解决方案

    长期以来楼主一直被一个问题困扰,就是win8进入界面,输密码时开大写其实是小写,开小写是大写.进入系统以后shift键是默认按下的.一直以为是电脑中毒了.上网查了一些东西,发现可能是因为键盘硬件方面的 ...

  10. myeclipse和eclipse安装Java反编译插件

    为myeclipse和eclipse安装Java反编译插件    插件所需包 1.解压jad1.5.8g.zip.将jad.exe放到jre的bin目录下,下载地址: http://ishare.ia ...