javascript+HTML5 canvas繪制時鐘功能示例
本文實(shí)例講述了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è)計有所幫助。
- JavaScript實(shí)現(xiàn)拖動滑塊拼圖驗證功能(html5、canvas)
- javascript實(shí)現(xiàn)移動端 HTML5 圖片上傳預(yù)覽和壓縮功能示例
- JS+HTML5本地存儲Localstorage實(shí)現(xiàn)注冊登錄及驗證功能示例
- JS+html5實(shí)現(xiàn)異步上傳圖片顯示上傳文件進(jìn)度條功能示例
- js+HTML5 canvas 實(shí)現(xiàn)簡單的加載條(進(jìn)度條)功能示例
- JavaScript+HTML5 canvas實(shí)現(xiàn)放大鏡效果完整示例
- JavaScript利用html5新方法操作元素類名詳解
相關(guān)文章
JavaScript實(shí)現(xiàn)忘記密碼功能的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何使用HTML、CSS和JavaScript實(shí)現(xiàn)一個完整的忘記密碼功能,文中的示例代碼講解詳細(xì),需要的可以參考一下2024-01-01
zTree獲取當(dāng)前節(jié)點(diǎn)的下一級子節(jié)點(diǎn)數(shù)實(shí)例
下面小編就為大家?guī)硪黄獄Tree獲取當(dāng)前節(jié)點(diǎn)的下一級子節(jié)點(diǎn)數(shù)實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09
javascript和jQuery中的AJAX技術(shù)詳解【包含AJAX各種跨域技術(shù)】
這篇文章主要介紹了javascript和jQuery中的AJAX技術(shù),結(jié)合實(shí)例形式分析了javascript與jQuery中ajax的實(shí)現(xiàn)方法以及AJAX各種跨域技術(shù)的原理與操作技巧,需要的朋友可以參考下2016-12-12
javascript 包裹節(jié)點(diǎn) 提高效率
模仿jQuery,創(chuàng)建幾個包裹節(jié)點(diǎn)的方法,發(fā)現(xiàn)jQuery的方法很低效啊,下一次他又可以說這幾個方法可以提升了多少多少了。2010-02-02
JavaScript實(shí)現(xiàn)背景自動切換小案例
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)背景自動切換小案例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-09-09

