返回列表 发新帖

使用canvas绘制超炫时钟

295.2k 9
swmozowtfl 发表于 2015-7-14 22:16:18|湖北 | 查看全部 阅读模式
先上效果图:
1 A9 ]9 N% W9 @4 q1 L# e8 \4 Z

; [% H0 ^4 H  @2 r                               
登录/注册后可看大图

6 k$ R0 ]5 H. B+ k% W# L9 L代码如下:
9 a" q2 u, `, q6 V2 ?
<!doctype html>
9 e: C% u- N( H<html># I( L0 P* R5 H1 C9 ?
<head>3 H6 S8 C; [% W) J
<meta charset=utf-8>; m( y7 ^3 x3 l) M
<title>canvas钟表</title>+ W8 K. V7 `: ?6 w2 b& W0 c8 T5 j# |
<meta name=keywords content=>' B+ h, `% J! Z7 u
<meta name=author content=@my_programmer>
  a/ b! W$ {' @; v1 O/ L<style type=text/css>
% c) ~% D: C9 o, bbody{margin:0;}
3 }  A& k9 ?/ f) R</style>+ i$ e! O+ \" {8 y+ G; N
</head>' y, _- r$ ]6 l; O& {/ u( M! J
<body onload=run()>1 A% }9 s9 c; ^" y" w' q4 E" {& g! p
<canvas id=canvas width=400 height=400 style=border: 1px #ccc solid;>如果你看到这段文字,说明你的浏览器弱爆了!</canvas>
% ?8 d% Q% g( F<script>  Y, z# u5 i; n& S) C; }) |
window.onload=draw;1 Y% I; k7 {) B7 q2 C% l1 a4 U
function draw() {8 g5 H5 A! F2 t3 U" X5 R
var canvas=document.getelementbyid('canvas');
& e- {% b2 L. Svar context=canvas.getcontext('2d');
) b1 N3 o/ ~! ~2 }8 ?/ s9 {context.save(); ///////////////////////////////////保存
* Z# {: M3 e. m; K: o% l/ vcontext.translate(200,200);
4 |& {* G2 A$ v! a/ }, w5 A6 \var deg=2*math.pi/12; ( B/ x1 G/ w/ b3 X9 w
//////////////////////////////////////////////////表盘
8 R/ G# v" j" Xcontext.save();
$ r. m, v, `0 j* i7 O; `context.beginpath(); 5 d) `( B  I1 O  t" ?" h' a& H+ J+ j
for(var i=0;i<13;i++){; B: S! O8 i, x8 ?7 @
var x=math.sin(i*deg);8 g' k4 ~1 R) q4 [+ R
var y=-math.cos(i*deg);
& b2 {# G; Q' V2 s$ f6 G; X! c; zcontext.lineto(x*150,y*150); ' P& |' r7 t. L; J% K, \
}
( b0 m* U, X: v9 Zvar c=context.createradialgradient(0,0,0,0,0,130);
$ [* f' b. ^# J5 D$ e8 ?* @c.addcolorstop(0,#22f);
2 x+ B" K1 p" Gc.addcolorstop(1,#0ef)
' N9 X1 \  P/ ?$ o0 {/ l5 Zcontext.fillstyle=c;
- v" o' Y, n) m/ }% ccontext.fill();
( Z% d6 }. \& o. L& Y8 |: Pcontext.closepath();
6 x1 ?6 K; a% l. T  a5 _: c% @context.restore();
. v- ]4 A- k. C- c; `, v2 J3 |; I//////////////////////////////////////////////////数字
# ~% r  I3 R6 d  x+ o4 ?0 R  u% n/ E/ K. ycontext.save();) Y9 i% h9 B- n- Q, B: h: Q
context.beginpath();
' w- m3 E8 D8 i6 ~for(var i=1;i<13;i++){
8 p5 R/ Y" ~+ N! ^var x1=math.sin(i*deg);
3 `$ n9 ^- f5 P' Kvar y1=-math.cos(i*deg);
' z4 R( E7 E, H+ Q7 x  i9 _+ kcontext.fillstyle=#fff;/ u* E6 e( g, g, v" h
context.font=bold 20px calibri;
% P/ a; a# L) o& Z) o- [, A# fcontext.textalign='center';
+ J1 p0 A- D$ V' d, Hcontext.textbaseline='middle';
  P5 I$ o" Z. b5 O- A7 x1 ~) k' scontext.filltext(i,x1*120,y1*120); 7 i8 J3 E# x  u) I# r' }) _: Y( O
}  ~7 [, j. x6 t( N! c; o
context.closepath(); ; U$ s* p0 Q& }/ ^5 r  K
context.restore();
1 b1 n; z: c& S. R0 i* u//////////////////////////////////////////////////大刻度) _! R7 W4 L6 Y0 H6 m: \" A
context.save();8 q5 W* r6 {# k  J* @( ~
context.beginpath();
/ W0 Q2 y. S3 u0 [, ]6 h+ tfor(var i=0;i<12;i++){
% }' h8 p3 i& }0 ^0 mvar x2=math.sin(i*deg);
3 _- G3 W3 E. ~/ z% @var y2=-math.cos(i*deg);4 U, d: L/ ]7 p
context.moveto(x2*148,y2*148);
( `2 a, `1 ~4 U" u+ vcontext.lineto(x2*135,y2*135);
* i3 U/ m% z. u. Z' u7 ]}
- U( c+ X, z  b- y$ Hcontext.strokestyle='#fff';
2 V4 f- d: s" h& |context.linewidth=4;
8 a  L% P  `5 {* Z7 gcontext.stroke();6 ?+ r6 R& _7 q9 }& l0 Y6 a
context.closepath();. a0 n: f( d9 F+ U
context.restore(); " Q& ?" A1 H1 C) A# r
//////////////////////////////////////////////////小刻度) g- \; b& @  ]$ [: b2 W
context.save();
: d( d7 N! ^' ~3 X: `8 Dvar deg1=2*math.pi/60;
9 S4 f2 O7 N1 v2 ]5 Scontext.beginpath();
5 b& }5 H8 i9 k# x5 V/ k) ^, qfor(var i=0;i<60;i++){4 U& v) s  K  z9 u0 l
var x2=math.sin(i*deg1);( u5 O1 q; ?+ F; |9 p) ?+ S) ~' S
var y2=-math.cos(i*deg1);
6 ]/ s3 v7 i8 ]" Mcontext.moveto(x2*146,y2*146);$ N: g* k0 _1 Z1 M
context.lineto(x2*140,y2*140);
, t" G% R" ]7 T  x1 `8 H- G}
7 G8 ^. ]! k2 d' G3 M; ucontext.strokestyle='#fff';8 |6 o2 v4 G. W2 m/ c, ]
context.linewidth=2;
" E: W0 O, U- z0 S9 W4 Bcontext.stroke();$ S3 m! A+ O$ X
context.closepath();
: v3 p+ s. F3 w, m1 Bcontext.restore(); 7 V" `) [; P3 ]# E( B6 f# D+ i% b
///////////////////////////////////////////////////文字' y; i+ ^; Q. I# p" W9 j  @: B- V
context.save();
+ ?3 X9 |1 _9 Z* y4 ^5 Acontext.strokestyle=#fff;
1 K( E8 t: w: A- n% n2 W& ncontext.font=' 34px sans-serif';* P: P2 I6 U" L0 q
context.textalign='center';$ |" ^3 L, d4 p+ J7 O$ V
context.textbaseline='middle';
" p% e9 Y( o: `/ R3 N6 c7 c  B. rcontext.stroketext('canvas',0,65);
$ q. g" c( P5 c3 @, ~: Hcontext.restore();
( t( a# a, Y' V1 ~; N/////////////////////////////////////////////////new date* r" q- p" w2 {9 e* g
var time=new date();
# Z. P. _$ y; q! ?var h=(time.gethours()%12)*2*math.pi/12;8 d/ V; I- e3 e& B. G  u8 d: b
var m=time.getminutes()*2*math.pi/60;% V0 c1 l3 u# r3 r- Y% Z
var s=time.getseconds()*2*math.pi/60;</p> <p>////////////////////////////////////////////////时针$ z1 x, j& [2 i1 P
context.save();
- k' c* c" X- D' X# Icontext.rotate( h + m/12 + s/650) ;
& W4 H3 J6 q. U1 y/ ~: T3 t9 t+ Bcontext.beginpath();
8 u6 i8 h* _7 y1 ^/ ]0 G0 A$ _context.moveto(0,6);6 p- f# E- @2 B. \7 S# I: q
context.lineto(0,-85);1 J0 C! E2 O! e/ L1 `! Q, V
context.strokestyle=#fff;
& R+ o$ d" C4 f8 Dcontext.linewidth=6;
0 \" ]! G# z3 W$ ?* Kcontext.stroke();# N$ z- y. E9 A" o% i4 U1 N
context.closepath();! v8 S% b) {5 S' |8 m: r
context.restore();
/ {/ P5 M/ A2 y6 I: m" i4 l' W//////////////////////////////////////////////分针
/ C, g! Y5 o0 O1 a/ g6 Gcontext.save();$ v* ~# G9 l6 ?6 O! u
context.rotate( m+s/60 ) ;3 C9 a  i! t! `
context.beginpath();
  x, Q5 ]4 f* s. }. }# m+ Icontext.moveto(0,8);6 x9 B, D6 ]8 z1 e5 U! Z  \: J
context.lineto(0,-105);
) w/ E& W! B( l" h' l+ l4 i; Ycontext.strokestyle=#fff;9 B. P4 _& a" M. E. n; C2 B) P8 r, l
context.linewidth=4;, e& b" q* F' B! u6 }" ]
context.stroke();" g; w  F. {! B; ?8 E9 O5 d$ M( c6 O3 w/ g
context.closepath();
5 Y4 z0 D5 [, K" }context.restore();' R3 M; H4 z' o2 J
/////////////////////////////////////////////秒针
" X- b& i) y4 `: Y: r- Ccontext.save();2 t, R# ?( W5 o% E: y
context.rotate( s ) ;
! g( O. W5 o$ ~& x2 mcontext.beginpath();% q  d2 M9 c. s0 a% u' L
context.moveto(0,10);4 q+ ^4 c4 G4 c9 y: }/ a
context.lineto(0,-120);! f: T! ^) S! H
context.strokestyle=#fff;" E. D9 Y: s( l# S
context.linewidth=2;, x4 N  z1 t0 f
context.stroke();8 q/ R% q9 W4 t) [& I
context.closepath();" W+ B0 W( P' y1 j/ X7 u
context.restore(); ! s  k# O# D2 L; J' k
context.restore();/////////////////////////////栈出3 o5 a# \* z: T1 f$ z$ R; k
settimeout(draw, 1000);/////////////////////////////计时器</p> <p>}</p> <p></script>+ J# ?8 v! S& t2 S# r! b
</body>8 g: I- N+ [' r) {- U! j' @8 o) Z# T
</html>
$ J+ i1 G6 ^1 e
( f. ]9 [8 U; r" O' h/ R7 R8 H6 Z更多网页制作信息请查看: 网页制作

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