返回列表 发新帖

使用canvas绘制超炫时钟

295.0k 9
swmozowtfl 发表于 2015-7-14 22:16:18|湖北 | 查看全部 阅读模式
先上效果图:
- z2 D  F, G1 X% @: t/ c
8 N, X* M# ~+ r+ V( `% U6 U8 y
                               
登录/注册后可看大图

3 [$ [# x' \1 h* G  G8 @代码如下:5 V  s# ?6 x. Z
<!doctype html>
4 h' C2 F6 ]& s<html>' p5 U3 _9 t2 X2 j! `/ S- S
<head>; N0 Y% L7 O- V) }5 Y: h0 o
<meta charset=utf-8>
$ {6 a: ?$ `. ~<title>canvas钟表</title>, P' C$ W1 s) b- o' t) F  Q
<meta name=keywords content=>
; ~0 ^& z4 p) r" i<meta name=author content=@my_programmer>8 e( Q8 W8 `% G9 L1 |% r/ w2 ?
<style type=text/css>
- M) h0 X; i, h. H: }( h+ obody{margin:0;}
( p7 V& {# V& k9 B6 D8 v% {</style>, `, w$ R! o+ `9 R0 t' b& q
</head>
/ f( }. ]7 |& B* r* `1 a<body onload=run()>" `# V* ?8 e% }; S' P6 |4 w
<canvas id=canvas width=400 height=400 style=border: 1px #ccc solid;>如果你看到这段文字,说明你的浏览器弱爆了!</canvas>
1 `2 p! j" X9 e1 {<script>
" H' R+ H  s4 v1 I- W$ uwindow.onload=draw;+ u. h# @: x0 U( P; u( M/ Z1 n  J
function draw() {
& ~. O3 |  J9 Y5 h: v( Q) avar canvas=document.getelementbyid('canvas');1 a; ~% f: ~; b* J# }
var context=canvas.getcontext('2d');" N5 k! _, u+ p. f* u
context.save(); ///////////////////////////////////保存
# D8 C; j; W0 h  u+ N: b: Gcontext.translate(200,200);$ L1 f9 ~- z/ k% ]+ l$ r
var deg=2*math.pi/12; 2 T0 c# A$ H, o' O
//////////////////////////////////////////////////表盘6 N# f1 O3 r9 T& ~. @/ a
context.save(); 6 y: h8 l2 I3 \9 x0 q, K+ O
context.beginpath();
" I3 J! {0 }5 d6 p# q5 |for(var i=0;i<13;i++){3 G% J) |$ o, ?: E
var x=math.sin(i*deg);
5 Q% f# Y1 D' V: ~4 \var y=-math.cos(i*deg);
/ K% @% T8 S3 t2 E3 Pcontext.lineto(x*150,y*150); : B- Z( v; ~2 A* Y* h) @  b
}
6 h1 z* r, E4 v' E. r& @: Bvar c=context.createradialgradient(0,0,0,0,0,130);, n" }$ G. X1 C1 h: B7 q
c.addcolorstop(0,#22f);
; o% S, R' v' c. pc.addcolorstop(1,#0ef)
  Z4 d9 u( r5 k, u! ucontext.fillstyle=c;
3 F$ W. j) y% j% e# t# b1 L2 e6 Dcontext.fill();9 V0 q! M$ i' _) a
context.closepath();
& p; A4 b! W) }( y0 M/ xcontext.restore(); 8 P1 T; _" r  \, t! g1 a8 V
//////////////////////////////////////////////////数字
. u4 ~0 j  L% z) }# t$ O2 ycontext.save();
6 t  i- V3 `/ D9 rcontext.beginpath();
2 B9 H8 X3 |: |5 kfor(var i=1;i<13;i++){
$ o& T2 E8 {0 f# Kvar x1=math.sin(i*deg);0 |* ^0 ?7 @& I- H( @( y
var y1=-math.cos(i*deg);: p7 [3 }1 ^4 F( x. Q; g5 E
context.fillstyle=#fff;
; {9 k* F* h6 `context.font=bold 20px calibri;
; e+ E% ~* L6 x, Xcontext.textalign='center';+ b& y; }9 C3 H2 a
context.textbaseline='middle';* i" m% w' M- ]+ y0 @  `
context.filltext(i,x1*120,y1*120); & n, k5 V  d6 _$ a
}
" `7 W( ~, v, a2 u7 B# R6 Bcontext.closepath(); 0 V* I# p- r, ?/ C
context.restore();
7 R$ Q# s5 P' g! r//////////////////////////////////////////////////大刻度! q; I: t3 }$ R2 @
context.save();9 t- h0 Q+ x" E% ^% U* s: Y
context.beginpath(); ! U4 \# D- i9 }% A3 ~& ~
for(var i=0;i<12;i++){
" S$ U/ c, V& \4 uvar x2=math.sin(i*deg);. N. V% Y$ j# W. q5 t
var y2=-math.cos(i*deg);
" J$ y  b% z2 M' c* {1 m/ Ocontext.moveto(x2*148,y2*148);$ i- D+ @: ?3 p" N, H: V3 v
context.lineto(x2*135,y2*135); ) `, R9 {5 S4 P( B0 a% \
} ) M+ |; [# A4 X. p
context.strokestyle='#fff';, U$ _. Z6 c1 Q3 q1 K: H& q6 `
context.linewidth=4;
8 e$ M) `- Q- {: F0 Vcontext.stroke();
; b* Y6 G$ m: J6 h0 }. Bcontext.closepath();
9 B( Z+ y$ y$ }- ?! ?% E1 ?. icontext.restore();
6 Q( a  l* ~' W2 p' `: r! ?" T//////////////////////////////////////////////////小刻度
% g" @/ M# `! Y; v6 w! `+ T. ~+ kcontext.save();+ [; Z/ r5 z( u" V2 g% Y
var deg1=2*math.pi/60;' [, d  Q, I  z& l& o" a/ y
context.beginpath();
% m* y4 x; l  Dfor(var i=0;i<60;i++){( D; k6 G& v. m3 s) b# J1 \
var x2=math.sin(i*deg1);# v5 n* `/ o2 m9 ^- _2 c- i9 G
var y2=-math.cos(i*deg1);
2 v0 }/ K: L7 U& Hcontext.moveto(x2*146,y2*146);
; S. ~: {) p. \1 I! L+ H+ a0 W/ hcontext.lineto(x2*140,y2*140); 1 P4 c$ o- y; q5 f5 E( o
}
- c1 c! Q  z7 p+ \6 O, qcontext.strokestyle='#fff';
/ `/ I/ T- O. b( \9 }& U8 Bcontext.linewidth=2;
6 z  z( l: [2 r* ~7 @% Mcontext.stroke();9 q' Z" R( L1 R; T) H- h1 ~
context.closepath();
& J% |, ]2 v: l& e' e/ |4 Y" ncontext.restore(); - E- L% V9 N- m
///////////////////////////////////////////////////文字
) v7 P1 q1 X$ O  econtext.save();
' j" Z" z# I" k- [, s7 Ocontext.strokestyle=#fff;' R% j$ X( ?! U" x1 s  R: A! K5 Q
context.font=' 34px sans-serif';
1 j0 \: l+ s. O: |1 ucontext.textalign='center';$ l. @# r3 A8 H5 _7 K
context.textbaseline='middle';( h, }: i1 Q8 e( a2 ]
context.stroketext('canvas',0,65); 5 v  _* z  c! G# S3 U
context.restore();   U$ s7 l9 g: T: e  F0 @1 {- ?9 _
/////////////////////////////////////////////////new date
' c# l+ D# d$ S; r5 l6 K4 d6 Vvar time=new date();
' F7 ^6 V: D- ~; z$ _var h=(time.gethours()%12)*2*math.pi/12;% q1 O& d$ t; `" \0 h( a
var m=time.getminutes()*2*math.pi/60;+ @) D) B9 Q. Z% Y7 p+ A
var s=time.getseconds()*2*math.pi/60;</p> <p>////////////////////////////////////////////////时针/ l0 d1 N! V* t% g) q
context.save();
9 }5 P1 b$ W- |) t. Ocontext.rotate( h + m/12 + s/650) ;
$ G# R; F6 r1 j& ucontext.beginpath();# N  I4 l( q+ R+ o
context.moveto(0,6);
% ^+ l8 ^; q; J* a$ W( \context.lineto(0,-85);
) p3 `# F: t8 J% U, F& Qcontext.strokestyle=#fff;
% L0 M4 v) A( A8 c/ V4 scontext.linewidth=6;
, W  Z0 ^* R2 v# S1 ]& t- [: tcontext.stroke();
5 W4 Y& n9 O3 F% f$ Ycontext.closepath();% v9 u3 i2 k7 T8 a! c/ V2 Q
context.restore();6 ^" G* s' ?; m* C6 U' q6 x/ _
//////////////////////////////////////////////分针
  G) B' O# e6 Q" Ucontext.save();
3 K- C$ B8 g2 K' J6 ^7 {9 Econtext.rotate( m+s/60 ) ;) |* E1 ]- M8 D5 C. ^
context.beginpath();5 b; V( l0 z) }1 Y/ K7 t
context.moveto(0,8);
' B1 y* ]+ M4 P. e5 ~  G; A: D/ m9 ?context.lineto(0,-105);5 ]! \7 b2 Z8 `
context.strokestyle=#fff;
9 q% K( ?$ Z. t+ r4 kcontext.linewidth=4;" c6 W; s" x! j4 n1 D: `4 }
context.stroke();5 |) i( L9 ]8 j+ p/ F% s
context.closepath();
: T: O5 {3 q/ ~2 v  Ncontext.restore();& o4 C6 D0 Q2 U* m" }2 z# j& C
/////////////////////////////////////////////秒针% i9 B/ C# F& q: E
context.save();
8 C: J7 m% r7 s. {context.rotate( s ) ;
2 L' E: {; H; k) e' T& kcontext.beginpath();# h: y1 K+ r( A4 l
context.moveto(0,10);
  ~4 T  j2 D$ f9 {) Zcontext.lineto(0,-120);
* N; u3 I8 J; K5 P5 Dcontext.strokestyle=#fff;
# ?* h) s8 O: T* Acontext.linewidth=2;
! }0 |( I- S2 }* z9 w+ o5 [context.stroke();# `, M: {! |9 u3 p7 {! }2 U* X% n
context.closepath();
' o8 i3 t8 s: Z6 ^context.restore();
1 D( M" g/ D6 y( n9 u2 Lcontext.restore();/////////////////////////////栈出8 ^' Z% i# ^2 R% Z
settimeout(draw, 1000);/////////////////////////////计时器</p> <p>}</p> <p></script>( x6 T# R- N+ j0 Z' f3 Z- T0 Y
</body>" b! S+ d8 k7 Z' v* R5 M
</html>6 K% a4 u' y* Z& U

6 o% d9 F. d& Q, b3 Q9 a更多网页制作信息请查看: 网页制作

回复|共 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客服 返回顶部
快速回复 返回顶部 返回列表