先给个效果图,我画的比较丑,大家可以自己美化一下,

直接上代码:

<!DOCTYPE html>
<meta charset="utf-8">
<html>
<body>
<canvas width="500" height="500" id="clock" >
您的浏览器不支持canvas
</canvas>
<script>
//获取画布
var clock=document.getElementById('clock');
//设置绘图环境
var cxt=clock.getContext('2d'); function drawClock(){
//清除画布
cxt.clearRect(0,0,500,500);
//获取时间,
var now =new Date();
var second =now.getSeconds();
var minute =now.getMinutes();
var hour1 =now.getHours();
//将24小时进制转为12小时,且为浮点型
var hour=hour1+minute/60;
hour=hour>12 ?hour-12:hour;
//获取全部时间
var time=now.toLocaleString( ); //表盘
//开始新路径
cxt.beginPath();
cxt.lineWidth=8;
cxt.strokeStyle="blue";
//路径函数 x,y,r,角度范围,顺时针/逆时针
cxt.arc(250,250,200,0,360,false);
cxt.stroke();
cxt.closePath();
//刻度,利用旋转
//时刻度
for(var i=0;i<12;i++){
//保存当前状态
cxt.save();
//刻度粗细
cxt.lineWidth=5;
//刻度颜色
cxt.strokeStyle="black"
//设置00点,以画布中心为00
cxt.translate(250,250);
//设置旋转角度 参数是弧度,角度 0--360 弧度角度*Math.PI/180
cxt.rotate(i*30*Math.PI/180);
cxt.beginPath();
//刻度起始点
cxt.moveTo(0,-180);
//刻度结束点
cxt.lineTo(0,-195);
cxt.closePath();
cxt.stroke();
//将旋转后的图片返回原画布
cxt.restore();
} //分刻度
for(var i=0;i<60;i++){
//保存当前状态
cxt.save();
//刻度粗细
cxt.lineWidth=3;
//刻度颜色
cxt.strokeStyle="black"
//设置00点,以画布中心为00
cxt.translate(250,250);
//设置旋转角度 参数是弧度,角度 0--360 弧度角度*Math.PI/180
cxt.rotate(i*6*Math.PI/180);
cxt.beginPath();
//起始点
cxt.moveTo(0,-188);
cxt.lineTo(0,-195);
cxt.closePath();
cxt.stroke();
//将旋转后的图片返回原画布
cxt.restore();
}
//表盘中心
cxt.beginPath();
cxt.lineWidth=1;
cxt.strokeStyle="red";
cxt.fillStyle="red";
//路径函数 x,y,r,角度范围,顺时针/逆时针
cxt.arc(250,250,4,0,360,false);
cxt.fill();
cxt.stroke();
cxt.closePath();
//时针
//保存当前状态
cxt.save();
cxt.lineWidth=5;
cxt.strokeStyle="black";
//设置异次元空间00点
cxt.translate(250,250);
//设置旋转角度 参数是弧度,角度 0--360 弧度角度*Math.PI/180
cxt.rotate(hour*30*Math.PI/180);
cxt.beginPath();
cxt.moveTo(0,-120);
cxt.lineTo(0,10);
cxt.closePath();
cxt.stroke();
cxt.restore();
//分针
cxt.save();
cxt.lineWidth="3";
cxt.strokeStyle="black";
cxt.translate(250,250);
cxt.rotate(minute*6*Math.PI/180);
cxt.beginPath();
cxt.moveTo(0,-150);
cxt.lineTo(0,15);
cxt.closePath();
cxt.stroke();
cxt.restore();
//秒针
cxt.save();
cxt.lineWidth="1.5";
cxt.strokeStyle="red";
cxt.translate(250,250);
cxt.rotate(second*6*Math.PI/180);
cxt.beginPath();
cxt.moveTo(0,-160);
cxt.lineTo(0,20);
cxt.closePath();
cxt.stroke();
//秒针前端小点
cxt.beginPath();
//外环为红色
cxt.strokeStyle="red";
//灰色填充
cxt.fillStyle="gray";
cxt.arc(0,-145,4,0,360,false);
cxt.fill();
cxt.closePath();
cxt.stroke();
cxt.restore();
//表盘中心
cxt.beginPath();
cxt.lineWidth=1;
//外环为红色
cxt.strokeStyle="red";
//灰色填充
cxt.fillStyle="gray";
//路径函数 x,y,r,角度范围,顺时针/逆时针
cxt.arc(250,250,4,0,360,false);
cxt.fill();
cxt.stroke();
cxt.closePath();
//写时间
cxt.font="15px 黑体 ";
cxt.fillStyle="black";
//实心字
cxt.fillText(time,160,150);
}
//使用setInterval(代码,毫秒时间)使时钟转起来;
drawClock();
setInterval(drawClock,1000); </script>
</body>
</html>

最新文章

  1. 浅谈JDBC访问MySQL数据库
  2. Active MQ 传输 ObjectMessage 异常
  3. Linux下通过NFS共享文件夹
  4. Turtle Online:致力于打造超接地气的PC前端架构,组件+API,快速搭建前端开发
  5. AI 行为树
  6. Oracle左连接、右连接、全外连接
  7. C++_template_栈的链式存储及实现
  8. html5权威指南:用元数据元素说明文档
  9. Django使用Celery异步任务队列
  10. Mysql中设置指定IP的特定用户及特定权限
  11. intellij idea在project下同时打开多个工程(maven工程)
  12. java EE(1)
  13. HDU1069 最长上升子序列
  14. Mybatis(二)基于注解的入门实例
  15. 【Hadoop 分布式部署 三:基于Hadoop 2.x 伪分布式部署进行修改配置文件】
  16. Eclispe中编辑xml配置文件时不会提示也不能自动调整格式
  17. WP8.1学习系列(第二十六章)——控件模板
  18. Tomcat的error-page掩盖action实例化的exception
  19. Xcode解决“Implicit declaration of function &#39;XXX&#39; is invalid in C99” 警告或报错
  20. delphi的ActionToolBar控件的使用 [问题点数:50分]

热门文章

  1. 60s 经济学探奇
  2. HashMap的工作原理(转)
  3. swfupload组件后台获取中文文件名称乱码的问题解决
  4. uva live-2322 - Wooden Sticks
  5. 搭建自己的XenServer+CloudStack云平台,提供IaaS服务(一)环境搭建
  6. C编译: 使用gdb调试
  7. iOS App 性能优化总结
  8. [置顶] Guava学习之Immutable集合
  9. delphi 发送消息控制滚动条
  10. Java EE (13) -- 常用的基础结构模式