博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
canvas如何绘制钟表
阅读量:6963 次
发布时间:2019-06-27

本文共 2742 字,大约阅读时间需要 9 分钟。

效果图为

clipboard.png

上代码:

var canvas = document.getElementById('canvas');var ctx = canvas.getContext('2d');var year,month,day,hour,second,minute;// 绘制表盘function drawClockPie(){    ctx.beginPath();    ctx.lineWidth = 2;    ctx.strokeStyle = '#333';    ctx.arc(150,150,146,0,2*Math.PI);    ctx.stroke();    ctx.closePath();    ctx.beginPath();    ctx.arc(150,150,6,0,2*Math.PI);    ctx.fillStyle = 'red';    ctx.fill();    ctx.closePath();}// 绘制时刻度function drawClockHours(){    for(var i = 0,l = 12; i < 12; i++){        ctx.save();        ctx.translate(150,150);        ctx.rotate(i*1/12*2*Math.PI);        ctx.beginPath();        ctx.lineWidth = 5;        ctx.strokeStyle = '#333';        ctx.moveTo(0,-140);        ctx.lineTo(0,-125);        ctx.stroke();        ctx.closePath();        ctx.restore();    }}// 绘制分刻度function drawClockMins(){    for(var i = 0,l = 60; i < 60; i++){        ctx.save();        ctx.translate(150,150);        ctx.rotate(i*1/60*2*Math.PI);        ctx.beginPath();        ctx.lineWidth = 3;        ctx.strokeStyle = '#333';        ctx.moveTo(0,-140);        ctx.lineTo(0,-133);        ctx.stroke();        ctx.closePath();        ctx.restore();    }}// 绘制时针function drawHourPin(){    ctx.save();    ctx.translate(150,150);    ctx.rotate((hour*60*60+minute*60+second)/(12*60*60)*2*Math.PI);    ctx.beginPath();    ctx.strokeStyle = '#333';    ctx.lineWidth = 3;    ctx.moveTo(0,0);    ctx.lineTo(0,-40);    ctx.stroke();    ctx.closePath();    ctx.restore();}// 绘制分针function drawMinPin(){    ctx.save();    ctx.translate(150,150);    ctx.rotate((minute*60+second)/(60*60)*2*Math.PI);    ctx.beginPath();    ctx.strokeStyle = '#333';    ctx.lineWidth = 2;    ctx.moveTo(0,0);    ctx.lineTo(0,-60);    ctx.stroke();    ctx.closePath();    ctx.restore();}// 绘制秒针function drawSecPin(){    ctx.save();    ctx.translate(150,150);    ctx.rotate(second/60*2*Math.PI);    ctx.beginPath();    ctx.strokeStyle = 'red';    ctx.lineWidth = 1;    ctx.moveTo(0,0);    ctx.lineTo(0,-80);    ctx.stroke();    ctx.closePath();    ctx.restore();}// 绘制时间文字function drawText(){    hour = hour >= 12 ? hour - 12 : hour;    var time = '现在是' + year + '年' + month +    '月' + day + '日' + hour + '时' + minute +    '分' + second + '秒';    ctx.font = '15px 黑体';    ctx.fillText(time,24,350);}// 获取时间function getTimes(){    var date = new Date();    year = date.getFullYear();    month = date.getMonth() + 1;    day = date.getDate();    hour = date.getHours();    minute = date.getMinutes();    second = date.getSeconds();}setInterval(function(){    ctx.clearRect(0,0,600,600);    drawClockPie();    drawClockHours();    drawClockMins();    getTimes();    drawText();    drawHourPin();    drawMinPin();    drawSecPin();},1000);

注:

当然时间也可以不用这样每隔一秒就获取,直接获取一次按秒递增就行。

转载地址:http://jlwsl.baihongyu.com/

你可能感兴趣的文章
C#学习常用类(11001)---TextRender类
查看>>
android 单元测试 如何run
查看>>
xcode4.2中如何取消ARC
查看>>
精锐5 IE -业内首款专为工业设备领域打造的加密锁
查看>>
ExtJS4.2学习(七)EditorGrid可编辑表格
查看>>
彻底理解ReentrantLock
查看>>
sqlite 时间函数
查看>>
Oracle学习笔记之第七节手动数据库链介绍
查看>>
<Error> <Socket> <BEA-000403> <IOException occurred on socket: Socket
查看>>
tcp协议几个要注意的点
查看>>
Python 之re模块
查看>>
Java注解之Retention、Documented、Inherited介绍
查看>>
Linux Shell常用技巧(九)
查看>>
JavaSE 学习参考:ArrayList和LinkedList区别
查看>>
css的权重(二)
查看>>
300+零售CIO大咖齐聚杭州 他们聊了什么?(二)
查看>>
高性能服务器架构思路(四)——编码复杂度和通信
查看>>
js方法名不同但是操作相同,这类方法整合
查看>>
cisco ASA 防火墙安全算法原理和基本配置 (二)
查看>>
ruby on rails 删除上传后的文件
查看>>