返回列表 发新帖

使用canvas绘制超炫时钟

295.0k 9
swmozowtfl 发表于 2015-7-14 22:16:18|湖北 | 查看全部 阅读模式
先上效果图:  i  v2 k/ O4 U8 k, i! }6 s
4 S8 L7 R# T0 O' @
                               
登录/注册后可看大图

7 r9 a2 I0 W1 R代码如下:. Y1 u& V0 O. F- |
<!doctype html>
3 b5 B" a4 Z$ b$ I7 w- c<html>
1 {; G% L2 c$ m5 x4 F; Z$ R. w; C<head>+ L1 K  ^! d' o
<meta charset=utf-8>4 m* h; D' R& D( ^
<title>canvas钟表</title>
- h) d  ]# D% s5 D<meta name=keywords content=>! [4 n$ T. k6 @( i
<meta name=author content=@my_programmer>
1 M) K! v) e4 `+ W" V<style type=text/css>8 A5 p, c" a# x) s3 d
body{margin:0;}% Q4 }2 `! b- G, _1 O) P7 Z" ~
</style>+ w8 ?+ t; {5 g: U% j
</head>5 q! ?# b1 I* X  P# Y( t  M/ O$ v
<body onload=run()>
+ ~  @. l2 E0 V1 N. c6 r<canvas id=canvas width=400 height=400 style=border: 1px #ccc solid;>如果你看到这段文字,说明你的浏览器弱爆了!</canvas>
( l1 R* M# D( W+ d1 \<script>! P! c% g% Q& _/ J9 w3 K
window.onload=draw;
7 Q+ E' q; Z+ f: L# q" }) j6 ^( yfunction draw() {, U5 r+ R0 N6 W6 J2 E
var canvas=document.getelementbyid('canvas');
" a0 l  A7 W- s( E7 Ovar context=canvas.getcontext('2d');
9 V+ o/ O9 l# w" ~: b; {9 {/ vcontext.save(); ///////////////////////////////////保存
* D. t7 U- b" w1 ~4 `context.translate(200,200);* n2 Q- k+ B" Y3 c& D
var deg=2*math.pi/12;
9 k8 s$ v9 |# M: \! Q//////////////////////////////////////////////////表盘0 H# W7 ^2 ^5 V# B+ h
context.save(); ! _- I8 x0 a0 Y  t: Z8 y' [
context.beginpath(); + t3 M( G2 ]' [+ T# B5 E) A
for(var i=0;i<13;i++){
. B4 c; ^/ p: V' \8 X( u( n* Ovar x=math.sin(i*deg);
) R, `. P1 z( [9 B+ ovar y=-math.cos(i*deg);/ [/ I' q- Y. w. J5 b! D" h
context.lineto(x*150,y*150);
4 ^% @( G: I4 }. f3 D5 K. q}
' [' O1 C; }1 X% O2 T* F" i2 t+ [var c=context.createradialgradient(0,0,0,0,0,130);  I1 B2 r$ y$ b2 K, ^1 g8 [
c.addcolorstop(0,#22f);! y( w9 r* a7 e, b5 q
c.addcolorstop(1,#0ef)
* S6 e) m' h/ T" o1 G0 y) v" Jcontext.fillstyle=c;* t! ~) k1 M8 G/ X8 t2 ]
context.fill();
' e+ a! d2 i* U! ?% i$ i# Ycontext.closepath();
( u- _: P# ^! b; tcontext.restore(); & z, S; H4 o. l( C9 t& t
//////////////////////////////////////////////////数字7 S2 f, I& d2 m$ e* p. i
context.save();, P4 ]. b$ J' U1 _
context.beginpath();
: `& H8 f" N' {( |+ S) Ofor(var i=1;i<13;i++){
' p) Z9 v% F0 {' F$ |/ hvar x1=math.sin(i*deg);% Y, D3 W+ Z2 Q, B
var y1=-math.cos(i*deg);
9 E! U- L% _, L1 J' ]* o$ ucontext.fillstyle=#fff;8 `' d1 k, r& R2 n1 x3 \, D
context.font=bold 20px calibri;& J7 M6 z8 C3 S' u9 q. f: }0 J
context.textalign='center';  r; k$ Q0 B% Z2 d1 T! m5 \. ^
context.textbaseline='middle';
0 B+ f" ]  G' u! T& Z: _context.filltext(i,x1*120,y1*120); 2 _7 F: {. Q% u0 j7 @0 v6 ?, @
}) w; X7 t/ {: I! E0 ^; D+ f
context.closepath();
, `$ h# A7 |. l. L2 B9 Mcontext.restore();
* g* R$ p& i: E4 X7 t5 g" C//////////////////////////////////////////////////大刻度! l) x0 C2 O6 j+ u  A1 L* i
context.save();
2 z1 U  J0 \- f6 gcontext.beginpath(); 7 C$ U& [7 L) H7 d: k
for(var i=0;i<12;i++){/ ?/ {5 E) c- ^' c- U
var x2=math.sin(i*deg);
* w/ t% R! B8 W. B: Svar y2=-math.cos(i*deg);3 I4 k# a1 f4 N1 h8 ]: N! y4 E6 f! k. t
context.moveto(x2*148,y2*148);
8 c3 z( \& S* N# r, H4 Mcontext.lineto(x2*135,y2*135);
" V+ `/ z3 j; r}
  _9 X4 H4 R. econtext.strokestyle='#fff';
: \5 ^' s* f  Jcontext.linewidth=4;9 V% ?5 H* V4 Q7 h4 I6 V
context.stroke();
% N* X* S7 H0 I0 }) ^context.closepath();, w; x8 D4 a7 W6 Z* P
context.restore();
, U1 T, P0 s- {/ x! b% A//////////////////////////////////////////////////小刻度" N& i1 e/ U1 N4 a6 e. S3 R
context.save();7 @; O7 v( n8 e6 z! Y3 E, c
var deg1=2*math.pi/60;" a6 {. P2 T6 w/ O
context.beginpath();
3 H9 x" s1 {& J! H/ d7 R  ^for(var i=0;i<60;i++){
1 i, w# U: c2 k8 Vvar x2=math.sin(i*deg1);5 K2 M) V" E8 v) W4 E1 ~$ T% J/ m
var y2=-math.cos(i*deg1);# Z. _9 T. d/ G9 X5 p: D
context.moveto(x2*146,y2*146);
8 j  R7 t5 n8 v9 pcontext.lineto(x2*140,y2*140); 2 W1 E5 R/ k$ Y) V8 i6 q
} # G1 }8 n8 B7 N. B
context.strokestyle='#fff';  w$ R2 h6 U# ^- M4 k4 J
context.linewidth=2;
3 N( t, n) h* k: Z6 S) C9 t  Hcontext.stroke();
0 Q! n# w+ K4 A$ D! d; E  x/ |9 [, tcontext.closepath();
4 n% A- b7 O# g) _! F' econtext.restore(); , c+ P0 z2 `* l9 R! b; S! Y+ g. k( F
///////////////////////////////////////////////////文字
' d! h+ S8 y' @3 w! l9 Y! ?) zcontext.save();
' H5 }6 s0 x0 @; V7 ^# ~context.strokestyle=#fff;
1 r3 E2 \: y' wcontext.font=' 34px sans-serif';  |) F, m, `* B6 z& g+ [
context.textalign='center';
8 G" `3 |+ {! ^. X& g6 D% O" bcontext.textbaseline='middle';
/ Q' W2 I9 N" {3 ~5 w9 Scontext.stroketext('canvas',0,65); / F' R3 H; w6 v# u
context.restore(); $ L+ c! f5 x1 h+ ^. e8 |
/////////////////////////////////////////////////new date
2 {' p% K- ?  t0 P; k0 ?0 pvar time=new date();
' o: p; ~! E( o- M* E7 W. v7 ?var h=(time.gethours()%12)*2*math.pi/12;2 A8 L) k# R2 q
var m=time.getminutes()*2*math.pi/60;
7 S4 E$ S. O+ }7 I; B3 fvar s=time.getseconds()*2*math.pi/60;</p> <p>////////////////////////////////////////////////时针
* G, G0 B" x2 n6 Tcontext.save();
6 g  q$ ?! ~/ R% i1 \2 h) ~context.rotate( h + m/12 + s/650) ;, L0 B  {0 _9 c( [5 T' b
context.beginpath();" [5 e4 p! m& ~# x, N
context.moveto(0,6);
: q% L) d- ~& y, r) v& Ncontext.lineto(0,-85);! U2 ]+ s2 W0 W+ x
context.strokestyle=#fff;
' U) Y+ ]0 `9 |& t* bcontext.linewidth=6;
0 w; @+ c4 O: @, Qcontext.stroke();4 U1 R1 M: R5 }0 @0 @
context.closepath();
5 A, Q+ k3 b2 s  R$ bcontext.restore();
& h: k4 R! h& d8 y  Z. {9 g  j//////////////////////////////////////////////分针
6 P/ F7 }  A4 v  S' Icontext.save();& {8 x6 @% ^+ f5 j. ^) }, i% O
context.rotate( m+s/60 ) ;6 f5 O) h) Z8 Q- [
context.beginpath();
2 s( f& H; d! ~! @" }5 R7 P, T# Hcontext.moveto(0,8);; ^/ [0 z; ~! v( v3 ^* ?: ~. ^
context.lineto(0,-105);
+ d, t- n2 _5 i1 G! ]; v! kcontext.strokestyle=#fff;
  }/ z' V5 J8 @' B5 Q- acontext.linewidth=4;: c; s, H& A- K
context.stroke();- u; p/ y. u0 w4 e% a+ I4 s% x
context.closepath();# y0 g2 J' G1 }
context.restore();, ]& g4 g; t0 V7 ]
/////////////////////////////////////////////秒针2 H+ A' Q4 g  L
context.save();8 ~; w1 d* `& C* s/ W# }0 d
context.rotate( s ) ;9 B- w& z5 b3 {/ [7 i
context.beginpath();
& v" `5 ~  h4 N/ g  O/ l/ Tcontext.moveto(0,10);! \$ G9 r: t& n& u2 @
context.lineto(0,-120);8 s, T2 b( H9 p. u/ o& R
context.strokestyle=#fff;
1 ]2 P  F1 s& X  q4 J, ycontext.linewidth=2;0 d$ A  |# ?" Z1 @* `# R
context.stroke();$ T+ H0 Y9 @$ {& K: s7 \2 D
context.closepath();
0 R# w) ?3 R$ V4 i* Gcontext.restore(); 3 s2 E9 L; Z& u" J! f
context.restore();/////////////////////////////栈出
3 d/ q$ K$ A3 K6 A; Y$ Vsettimeout(draw, 1000);/////////////////////////////计时器</p> <p>}</p> <p></script>" ~0 e% R9 ?: `- I9 T3 N
</body>$ s$ z: j6 y7 |" N' D
</html>
5 [5 ?8 h7 f* Q, i7 I# {' e
9 r; J5 u9 |3 G( Z9 L7 @更多网页制作信息请查看: 网页制作

回复|共 9 个

亮凌庚 Lv.15 发表于 2015-7-17 22:45:56|INNA | 查看全部
本人在此留言均为网络上复制,用于检验本人电脑键盘录入、屏幕显示的机械、光电性能。并不代表本人局部或全部同意、支持或者反对楼主观点。
xiaoye Lv.9 发表于 2015-7-17 22:52:30|美国 | 查看全部
对于这种刚发的帖子,我总是毫不犹豫的顶了。如果火了就是个前排,可以混个脸熟,说不定谁好心就给粉了…稳赚不赔;如果沉了就感觉是我弄沉的,很有成就感,还能捞经验。
xiaoye Lv.9 发表于 2015-7-17 22:57:46|台湾 | 查看全部
不为楼主的标题所吸引,也不是被贴子的内容所迷惑。
kwjvtwzx Lv.15 发表于 2015-7-17 22:58:03|亚太地区 | 查看全部
看,刚说你眼神不好,你还就来劲了不是.
kwjvtwzx Lv.15 发表于 2015-7-17 23:07:08|墨西哥 | 查看全部
我的我的 忘记了 呵呵
bqtklouu 发表于 2015-7-31 15:14:46|Reserved | 查看全部
还呕像.....
bqtklouu 发表于 2015-7-31 15:22:12|美国 | 查看全部
估计你是没见识过~` 呵呵
effoggikeftor 发表于 2015-7-31 15:25:17|北京 | 查看全部
嘿...反了反了,,,,
bqtklouu 发表于 2015-7-31 15:40:23|美国 | 查看全部
哈哈~` 好久没有笑喽~

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

得知互动是一个融创意、设计、开发、营销、生活、互联网于一体的专业交流分享平台。
Copyright © 2026 得知互动-专注Ai与站长技术交流社区-Ai交流平台 版权所有 All Rights Reserved. Powered by Discuz! X5.0 鄂ICP备15006301号-5|鄂公网安备 42018502006730号
关灯 在本版发帖 扫一扫添加QQ客服 返回顶部
快速回复 返回顶部 返回列表