视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
javascript+HTML5 canvas绘制时钟功能示例
2020-11-27 21:57:01 责编:小采
文档


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

效果如下:

代码:

<!DOCTYPE html>
<html>
<head lang="en">
 <meta charset="UTF-8">
 <title>www.gxlcms.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.jb51.net/code/HtmlJsRun测试一下运行效果。

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

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

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

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

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

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

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

下载本文
显示全文
专题