javascript+HTML5 canvas繪制時鐘功能示例
本文實例講述了javascript+HTML5 canvas繪制時鐘功能。分享給大家供大家參考,具體如下:
效果如下:
代碼:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>www.dbjr.com.cn 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);//重新定義圓點(diǎn)到中心 ctx.beginPath(); ctx.lineWidth=10*rem; ctx.arc(0,0,r-5*rem,0,Math.PI*2,false);//圓點(diǎn)坐標(biāo),起始角0,結(jié)束角2π,順時針 ctx.stroke(); var hourNum=[3,4,5,6,7,8,9,10,11,12,1,2];//數(shù)組存小時數(shù) 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++){//畫圓點(diǎn) 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();//中心圓點(diǎn) ctx.restore(); } setInterval(draw,1000); </script> </body> </html>
其中的rem值是為了使canvas畫布大小變化時時鐘的樣式能夠保持
感興趣的朋友可使用在線HTML/CSS/JavaScript代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測試一下運(yùn)行效果。
PS:這里再為大家推薦幾款時間及日期相關(guān)工具供大家參考使用:
在線日期/天數(shù)計算器:
http://tools.jb51.net/jisuanqi/date_jisuanqi
在線日期計算器/相差天數(shù)計算器:
http://tools.jb51.net/jisuanqi/datecalc
在線日期天數(shù)差計算器:
http://tools.jb51.net/jisuanqi/onlinedatejsq
Unix時間戳(timestamp)轉(zhuǎn)換工具:
http://tools.jb51.net/code/unixtime
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript時間與日期操作技巧總結(jié)》、《JavaScript+HTML5特效與技巧匯總》、《JavaScript圖形繪制技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計有所幫助。
相關(guān)文章
zTree獲取當(dāng)前節(jié)點(diǎn)的下一級子節(jié)點(diǎn)數(shù)實例
下面小編就為大家?guī)硪黄獄Tree獲取當(dāng)前節(jié)點(diǎn)的下一級子節(jié)點(diǎn)數(shù)實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09javascript和jQuery中的AJAX技術(shù)詳解【包含AJAX各種跨域技術(shù)】
這篇文章主要介紹了javascript和jQuery中的AJAX技術(shù),結(jié)合實例形式分析了javascript與jQuery中ajax的實現(xiàn)方法以及AJAX各種跨域技術(shù)的原理與操作技巧,需要的朋友可以參考下2016-12-12javascript 包裹節(jié)點(diǎn) 提高效率
模仿jQuery,創(chuàng)建幾個包裹節(jié)點(diǎn)的方法,發(fā)現(xiàn)jQuery的方法很低效啊,下一次他又可以說這幾個方法可以提升了多少多少了。2010-02-02