Canvas繪製時鐘

2022-06-18 12:42:12 字數 2756 閱讀 5317

首先,找一張時鐘的,就是下面這張了。

——來自bigger than bigger的dribbble**,**(侵刪)

然後就開始用canvas實現這個逼格滿滿的時鐘吧。在html**中插入canvas標籤

<

canvas

id="canvas"

width

="400"

height

="400"

>

canvas

>

由於瀏覽器對html5標準支援不一致,所以,通常在內部新增一些說明性html**,如果瀏覽器支援canvas,它將忽略內部的html,如果瀏覽器不支援canvas,它將顯示內部的html:

<

canvas

id="test-stock"

width

="300"

height

="200"

>

<

p>current price: 25.51

p>

canvas

>

在使用canvas前,用canvas.getcontext來測試瀏覽器是否支援canvas:

var canvas = document.getelementbyid('test-canvas');

if (canvas.getcontext) else

js檔案中建立畫布(假設我們使用的都是現代瀏覽器)。

function

clock()

//

繪製表盤底色

ctx.translate(200, 200); //

將座標原點移到畫布中心

ctx.rotate(-math.pi/2); //將座標軸逆時針旋轉90度,x軸正方向對準12點方向

var lingrad = ctx.createlineargradient(150, 0, -150, 0);

lingrad.addcolorstop(0, '#242f37');

lingrad.addcolorstop(1, '#48585c');

ctx.fillstyle =lingrad;

ctx.beginpath();

ctx.arc(0, 0, 150, 0, math.pi * 2, true

);ctx.fill();

比較關鍵的一點是畫布的座標軸x軸正方向是時鐘3點鐘方向,為了方便起見,我們把它逆時針旋轉90度讓它指向十二點鐘方向。

繪製刻度要用到旋轉rotate(變形 transformations by mdn),小時刻度有12個,相鄰兩個刻度與圓心連線的角度就是math.pi/6,這裡用的是弧度表示,也就是30度。那麼我們就用for迴圈來畫出小時的刻度。

for (var i = 0; i < 12; i++)
同理,分鐘的刻度也一樣。

ctx.beginpath();

for (i = 0; i < 60; i++)

ctx.rotate(math.pi / 30);

}

表盤大致畫好了,刻度也畫好了,接下來就是繪製指標並讓它指向正確的時間,是不是?不就就是畫一條直線麼。關鍵是指標rotate的角度是多少呢?其實也是比較簡單的。先獲取當前的時間,把小時轉換為12小時制的。

var now = new

date(),

sec =now.getseconds(),

min =now.getminutes(),

hr =now.gethours();

hr = hr > 12 ? hr - 12 : hr;

那麼,時針的位置就是(相對於x軸正方向轉過的角度):

ctx.rotate(hr * (math.pi / 6) + min * (math.pi / 360) + sec * (math.pi / 21600));
同理,分針和秒針的位置:

ctx.rotate(min * (math.pi / 30) + sec * (math.pi/1800)); //分針

ctx.rotate(sec * (math.pi /30)); //秒針

最後,最關鍵的讓指標轉動起來,這裡要用到的是requestanimationframe方法,用來重繪頁面,得到連貫逐幀的動畫,實現最佳的動畫效果。

window.requestanimationframe(callback);
這個callback就是我們的繪製時鐘的clock()函式。需要注意的是每次執行完requestanimationframe後需要清除畫布,不然出現重疊交錯的現象,我們把它放在clock函式開始的地方。

ctx.clearrect(0, 0, canvas.width, canvas.height);
到這裡,動畫效果圖如下:

canvas自適應圓形時鐘繪製

前面介紹過canvas粒子時鐘的繪製,本文將詳細介紹canvas自適應圓形時鐘繪製 最終自適應圓形時鐘的效果如下所示 下面來分析一下該圓形時鐘的功能 靜態背景 對於時鐘來說,背景是不變的,包括外層鐘框 內層圓點及數字 以及中心點的固定按扣 動態時鐘 時態的動態,表現在秒針 分針 時針隨著當前時間的變...

用canvas的arc繪製時鐘

在頁面上加入canvas標籤 body canvas id c1 width 600px height 600px span 不支援canvas瀏覽器 span canvas body js部分 繪製秒的刻度的思路是先用ogc.stroke 迴圈畫60個6 的扇形,將它們拼接成一整個圓,然後用ogc...

用canvas繪製乙個簡易時鐘

在見識了html5中canvas的強大,筆者準備製作乙個簡易時鐘。下面就是成果啦,製作之前我們先分析一下,繪製乙個時鐘需要做哪些準備。一 1.首先這個時鐘分為表盤,指標 時針,分針,秒針 和數字三部分。2.表盤是個圓,這個簡單。3.繪製指標時,需要先獲取到系統時間,然後找到時間和角度的關係。4.然後...