1. 程式人生 > >[SoOnPerson] HTML5 Canvas 模擬時鐘

[SoOnPerson] HTML5 Canvas 模擬時鐘

因為和朋友在討論一個關於時鐘的問題:

    一天(24h),時鐘的分針和時針可以重合多少次,他們一直在爭論22,23

然後我覺得蠻好玩的,就寫了一個看看,但是對於22,23,我也沒想數過

//螢幕的高度
var sc_height = screen.availHeight;
//螢幕的寬度
var sc_width = screen.availWidth;
//秒針角度
var jiaoduS = 0;
//分針角度
var jiaoduM = 0;
//一秒
var s = 1000   ;
function draw() {
    //jq獲取元素
var cav = $("#background_block_web");
//設定style裡的寬高 cav.css({"height": sc_height, "width": sc_width, "margin": 0}); //設定屬性寬高,這個不設定的話,圖案會很模糊 cav.attr("width",sc_width); cav.attr("height",sc_height); //原生獲取元素,通過jq獲取的好像不可以 var cv = document.getElementById("background_block_web"); //獲取上下文物件2d,具體我也不太懂 var context = cv.getContext('2d'); context.fillStyle = "white"
; context.fillRect(0,0,sc_width,sc_height); drawMap(context); } function drawMap(context) { window.setInterval(function () { //清除 context.clearRect(0,0,sc_width,sc_height); //黑色的填充色,圓球的填充色 context.fillStyle = 'white'; //開始 context.beginPath(); //圓的邊的顏色 context.strokeStyle = 'black'; //圓的 x,y,大小,起始角度,結束角度360度,也就是一圈,因為pi是180度
context.arc(300,300,300,0,2*Math.PI); //填充上面的黑色 context.fill(); //圓心為起點,畫一條直線(分針) context.moveTo(300,300); context.lineTo(300+150*Math.sin(jiaoduM),300-150*(Math.cos(jiaoduM))); //圓心為起點,畫一條直線(秒針) context.moveTo(300,300); context.lineTo(300+200*Math.sin(jiaoduS),300-200*(Math.cos(jiaoduS))); //角度增加 jiaoduS+=((6)*(Math.PI/180)); jiaoduM+=((0.1)*(Math.PI/180)); //畫 context.stroke(); },s); }

解釋一下表盤半徑300,圓心座標(300,300);左上角的座標軸(0,0),分針是短的那個,長度是150,秒針是長的,長度200

秒針每秒轉過的角度是6度,原因是60秒轉過360度,所以一秒六度

分針每秒轉過的角度是0.1度,原因是3600秒轉360度,所以一秒0.1度

π 是180度,所以π/180 =1度

至於每個角度對應的線段的終點座標,畫一個座標軸算一下就好

知道角度還有斜邊