首页 > 编程 > JavaScript > 正文

javascript+HTML5 canvas绘制时钟功能示例

2019-11-19 11:34:14
字体:
来源:转载
供稿:网友

本文实例讲述了javascript+HTML5 canvas绘制时钟功能。分享给大家供大家参考,具体如下:

效果如下:

代码:

<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <title>www.VeVB.COm canvas绘制时钟</title> <style>  div{text-align:center;margin-top:250px;} </style></head><body><div> <canvas id="clock" width="300px" height="300px"></canvas></div><script> var dom=document.getElementById("clock"); var ctx=dom.getContext("2d"); var width=ctx.canvas.width; var height=ctx.canvas.height; var r=width/2; var rem=width/200; function drawBackground(){  ctx.save();  ctx.translate(r,r);//重新定义圆点到中心  ctx.beginPath();  ctx.lineWidth=10*rem;  ctx.arc(0,0,r-5*rem,0,Math.PI*2,false);//圆点坐标,起始角0,结束角2π,顺时针  ctx.stroke();  var hourNum=[3,4,5,6,7,8,9,10,11,12,1,2];//数组存小时数  ctx.font="18px Arial";  ctx.textAlign="center";  ctx.textBaseline="middle";  hourNum.forEach(function (num,i) {   var rad=2*Math.PI/12*i;//弧度   var x=(r-30*rem)*Math.cos(rad);   var y=(r-30*rem)*Math.sin(rad);   ctx.fillText(num,x,y);  });  for(var i=0;i<60;i++){//画圆点   var rad=2*Math.PI/60*i;   var x=(r-18*rem)*Math.cos(rad);   var y=(r-18*rem)*Math.sin(rad);   ctx.beginPath();   if(i%5==0){    ctx.fillStyle="#000";    ctx.arc(x,y,2,0,Math.PI*2,false);   }   else{    ctx.fillStyle="#ccc";    ctx.arc(x,y,2,0,Math.PI*2,false);   }   ctx.fill();  }  ctx.closePath(); } function drawHour(hour,minute){//时针  ctx.save();  ctx.beginPath();  var rad=2*Math.PI/12*hour;  var mrad=2*Math.PI/12/60*minute;  ctx.rotate(rad+mrad);  ctx.lineWidth=6*rem;  ctx.moveTo(0,10*rem);  ctx.lineTo(0,-r/2);  ctx.lineCap="round";  ctx.stroke();  ctx.restore(); } function drawMinute(minute,second){//分针  ctx.save();  ctx.beginPath();  var rad=2*Math.PI/60*minute;  var srad=2*Math.PI/60/60*second;  ctx.rotate(rad+srad);  ctx.lineWidth=3*rem;  ctx.moveTo(0,10*rem);  ctx.lineTo(0,-r+30*rem);  ctx.lineCap="round";  ctx.stroke();  ctx.restore(); } function drawSecond(second){//秒针  ctx.save();  ctx.beginPath();  ctx.fillStyle="#c14543";  var rad=2*Math.PI/60*second;  ctx.rotate(rad);  ctx.moveTo(-2*rem,20*rem);  ctx.lineTo(2*rem,20*rem);  ctx.lineTo(1*rem,-r+18*rem);  ctx.lineTo(-1*rem,-r+18*rem);  ctx.fill();  ctx.restore(); } function drawDot(){//画中心圆圈  ctx.beginPath();  ctx.fillStyle="#fff";  ctx.arc(0,0,3*rem,0,2*Math.PI,false);  ctx.fill(); } function draw(){  ctx.clearRect(0,0,width,height);  var now=new Date();  var hour=now.getHours();  var minute=now.getMinutes();  var second=now.getSeconds();  drawBackground();//背景  drawHour(hour,minute);//小时  drawMinute(minute,second);//分钟  drawSecond(second);//秒钟  drawDot();//中心圆点  ctx.restore(); } setInterval(draw,1000);</script></body></html>

其中的rem值是为了使canvas画布大小变化时时钟的样式能够保持

感兴趣的朋友可使用在线HTML/CSS/JavaScript代码运行工具http://tools.VeVB.COm/code/HtmlJsRun测试一下运行效果。

PS:这里再为大家推荐几款时间及日期相关工具供大家参考使用:

在线日期/天数计算器:
http://tools.VeVB.COm/jisuanqi/date_jisuanqi

在线日期计算器/相差天数计算器:
http://tools.VeVB.COm/jisuanqi/datecalc

在线日期天数差计算器:
http://tools.VeVB.COm/jisuanqi/onlinedatejsq

Unix时间戳(timestamp)转换工具:
http://tools.VeVB.COm/code/unixtime

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript时间与日期操作技巧总结》、《JavaScript+HTML5特效与技巧汇总》、《JavaScript图形绘制技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结

希望本文所述对大家JavaScript程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表