先上效果图:
) ]) E3 P; d5 j9 o% }. | w- ?6 ~2 L5 I: F
代码如下:
# k' p# z! C4 R- f<!doctype html>
* ]% L# ~( o+ K6 q<html>/ q# X/ V- V2 {% y% j+ M
<head>2 B+ n& G) D" v# `% y& a. r
<meta charset=utf-8>% ]0 h9 z3 z8 o, t1 m/ n% z9 |( A
<title>canvas钟表</title>1 `; B3 p; A3 E+ ?. V4 f* F
<meta name=keywords content=>
6 h, L& }7 l3 c7 b( t" T<meta name=author content=@my_programmer>
# B8 G0 K: I+ X) c<style type=text/css>, i, H8 C5 @: |0 j) V
body{margin:0;}8 o7 I% y! s& S7 t: A$ N2 Q6 I1 @9 Z
</style>: j! j; K/ E% }+ {, D% j
</head>$ \$ B7 y, v L: z2 r' N2 e+ N: E
<body onload=run()>
T; j, r$ d6 r5 r# L. r+ K1 A9 f<canvas id=canvas width=400 height=400 style=border: 1px #ccc solid;>如果你看到这段文字,说明你的浏览器弱爆了!</canvas># B% a5 m+ J3 c9 Z" T
<script>
* W- \! d0 j9 `! {" zwindow.onload=draw;, x3 Q( j k" T2 p
function draw() {
8 H1 y. q. U |/ I" U3 b$ yvar canvas=document.getelementbyid('canvas');# p, w3 @) B& R" p
var context=canvas.getcontext('2d');
# P- V0 q( s- |# V: I W' n2 Econtext.save(); ///////////////////////////////////保存) G% ~$ {# l+ g9 i0 J
context.translate(200,200);3 A/ x( \( A+ D* L
var deg=2*math.pi/12; ' C9 ]' t$ U& e5 ]" `# U8 }0 w$ s
//////////////////////////////////////////////////表盘
4 G( u8 f" Q9 z8 ?context.save(); $ r7 r9 ~( \- i' T* B8 N
context.beginpath(); % E! _, I! i) p- s, l( z
for(var i=0;i<13;i++){* Q' U9 q' b$ w/ n& w7 }
var x=math.sin(i*deg);; L; G5 G3 j) R
var y=-math.cos(i*deg);
* y* V* p: T8 Y4 j* ncontext.lineto(x*150,y*150); & W, i9 y, U1 u1 }/ G' ]
}( ]+ Q$ H. f r2 I. N* G# v
var c=context.createradialgradient(0,0,0,0,0,130);# C" m& f) p1 y' F) C) s
c.addcolorstop(0,#22f);" N! u. G: @1 ~. @2 i; ^9 c+ R
c.addcolorstop(1,#0ef)
* {$ M; m$ u% H6 e7 ?5 ^context.fillstyle=c;) Z& w L; G9 k& a. {" @! `
context.fill();4 V; E' n) z }, v: o0 c
context.closepath(); 1 z% i' y/ T2 C: c$ ]
context.restore(); 7 o+ W- S G& e4 I2 e! a4 h! C% j
//////////////////////////////////////////////////数字
F; a& U q1 _6 }' F0 hcontext.save();* a% j5 n& i4 e( O* Q
context.beginpath();
7 f6 W" H+ I h @% C N: qfor(var i=1;i<13;i++){& F+ E! d0 p2 L# \
var x1=math.sin(i*deg);
: Y/ v w9 E2 J* ]# \/ C2 c' Fvar y1=-math.cos(i*deg);
/ p% l% P* {7 Z/ ^% k/ Y, qcontext.fillstyle=#fff;
6 t; D- u# I1 N7 J3 Ccontext.font=bold 20px calibri;' A2 E/ G6 |5 u: Z- b
context.textalign='center';
% O' G% ^7 ~9 [1 E$ ~context.textbaseline='middle';$ M9 r8 X1 A. b, |/ ^" u2 m
context.filltext(i,x1*120,y1*120);
/ v9 b% \8 G, E3 Y! m- ~" b3 z/ F* V}
# Q) x- v O0 X+ `- a! Lcontext.closepath(); ; r2 n0 b1 F1 y
context.restore();
9 M6 M+ o2 I8 i/ D. \4 d S- V" Y2 s//////////////////////////////////////////////////大刻度
9 E2 v( R& h7 t3 w" e o8 d+ xcontext.save();/ m9 }$ R$ m. M7 ?) ^" p
context.beginpath();
, E) k7 k8 f( v* g! ]4 o5 Xfor(var i=0;i<12;i++){* N1 ]: l" t3 p% w5 Y0 y
var x2=math.sin(i*deg);2 V) C; i# D3 f9 X" G
var y2=-math.cos(i*deg);
+ {4 m7 k" U; G% L1 pcontext.moveto(x2*148,y2*148);
7 n x. }2 y) Y1 C3 ~: G" ocontext.lineto(x2*135,y2*135);
# P- E5 {# z9 K7 G9 T0 F}
/ W5 n0 z3 l0 \" n1 r U, Y; Hcontext.strokestyle='#fff';
; x6 d F! _! u1 Z% P' Pcontext.linewidth=4;" P0 R6 Z9 S! ^5 J* b4 y
context.stroke(); f0 Z1 B6 a0 ^5 n$ w/ P, u9 S
context.closepath();! T6 d) x4 D2 ?& w5 Q# v
context.restore();
/ e6 p" d6 k: }# Z3 i/ d3 X//////////////////////////////////////////////////小刻度' L3 f, [; ~0 u
context.save();% q1 L, o( a# M$ {1 X5 n1 M
var deg1=2*math.pi/60;
. h" _/ h4 c% X" o* k2 xcontext.beginpath(); + |. V, ]/ K8 T2 T- J
for(var i=0;i<60;i++){
4 D& T3 K8 f0 ?0 ?var x2=math.sin(i*deg1);
3 L4 b2 O7 E& }( C/ avar y2=-math.cos(i*deg1);
9 X! M5 c1 W7 n* S+ ]context.moveto(x2*146,y2*146);- a, K1 V4 o5 i% L5 N- N" m1 I
context.lineto(x2*140,y2*140);
* _+ o1 T i8 E* a$ s6 y& l}
& V2 q5 a$ A- P' Tcontext.strokestyle='#fff';$ P, E. u9 u$ i" }
context.linewidth=2;: ~( A* m( d4 m3 L
context.stroke();
4 I0 f, p3 W: V; Ycontext.closepath();
% `) c1 c# W! }context.restore(); ) {" R; W- A6 k- v6 y4 C, f2 D
///////////////////////////////////////////////////文字6 B2 j. R+ c3 q0 N9 s: L
context.save();& E, Z. D8 E. M4 a
context.strokestyle=#fff;: i+ X- { I% j# ^- X
context.font=' 34px sans-serif';* y9 L6 Z |; o) |8 H0 u
context.textalign='center';
9 k6 S; i4 u1 O5 {& Wcontext.textbaseline='middle';: F; p' J, U- r. r7 K+ L- ~9 ^
context.stroketext('canvas',0,65); ' l2 g: s: O) f8 g% P
context.restore();
7 y( r1 C$ o- f4 O T) _/////////////////////////////////////////////////new date
+ n4 n8 b& k6 r* i% pvar time=new date();
7 T' K' `+ \9 }' X$ t, Evar h=(time.gethours()%12)*2*math.pi/12;) }/ J0 A+ s+ p" T7 ` ]
var m=time.getminutes()*2*math.pi/60;
2 Q' \% j) W; |& S4 N/ b6 h/ Z$ z9 Jvar s=time.getseconds()*2*math.pi/60;</p> <p>////////////////////////////////////////////////时针
: X6 |9 q3 Y: lcontext.save();8 O/ K4 g0 E4 I" Z& o }; O
context.rotate( h + m/12 + s/650) ;
3 ^1 M" h: m; C6 R5 _) d+ I" ?0 Gcontext.beginpath();" _/ F' V8 [6 w
context.moveto(0,6);9 A- X5 m' \( t J, \$ c
context.lineto(0,-85);
- E: G! `5 N1 Q3 q4 Fcontext.strokestyle=#fff;( I" z0 r7 V# c" }
context.linewidth=6;
+ n7 J9 E) Y% Econtext.stroke();
' g* { _9 s& L E8 v) qcontext.closepath();
1 K T5 s1 _5 g6 G* x, T( L. L) Ucontext.restore();
& Z8 i; m* J6 h% X+ z9 @5 C//////////////////////////////////////////////分针1 I( [" i3 K4 M5 z' Y8 G
context.save();
9 C2 ?5 X( R; ^" vcontext.rotate( m+s/60 ) ;2 d% a* j7 O9 C
context.beginpath();
9 c7 H. G* W* ?0 p' Wcontext.moveto(0,8);* W9 y% W4 h- l) g' Y" K
context.lineto(0,-105);7 e" {6 n. o1 a: F7 Z1 x
context.strokestyle=#fff;% ?# @, F9 ]6 m4 l2 {
context.linewidth=4;7 E$ ^. R6 L7 [& o1 b
context.stroke();
+ t' u3 l( j( Zcontext.closepath();' g- S+ v1 y2 g0 Y! C! B
context.restore();
) e) p- B0 c+ x0 I- s( e1 ^5 F$ f/////////////////////////////////////////////秒针2 y7 c9 D) F2 `4 v* J. J4 ]+ E
context.save();) @# S \. x- U$ b( h: ^2 R# U0 z
context.rotate( s ) ;
4 q+ L9 T9 }! u" m2 Econtext.beginpath();
6 \* x9 N; I+ ~context.moveto(0,10);
5 T8 y4 m' E$ E" V+ g3 c* Z) Jcontext.lineto(0,-120);: ~) R7 w- Y' ?/ U# d# u
context.strokestyle=#fff;; N5 ~: f" C* A' r h" X
context.linewidth=2;; ]* H, M/ k- `# M4 C1 F4 L, x
context.stroke();# i( w5 n1 e, o6 I
context.closepath();
7 _: V8 l% \( kcontext.restore();
$ T& Y& v. B/ z- t, S9 K9 f6 l& Ocontext.restore();/////////////////////////////栈出. N, y! H; O" m+ b1 ]8 P7 y7 S
settimeout(draw, 1000);/////////////////////////////计时器</p> <p>}</p> <p></script>
, H( |7 {. D2 ]+ {: h/ R</body>
, j' s0 d5 `2 v</html>1 E9 T- p- C" A0 T
* v& ?. U4 u, N1 x$ {( h) i- N5 O& o
更多网页制作信息请查看: 网页制作 |