返回列表 发新帖

使用canvas绘制超炫时钟

295.0k 9
swmozowtfl 发表于 2015-7-14 22:16:18|湖北 | 查看全部 阅读模式
先上效果图:6 m6 J- Z2 b& R! r* y9 k3 [7 M% J

( I0 M, I; m" h4 P0 f& o& T! m+ k2 z+ L$ \                               
登录/注册后可看大图

9 Z( j% A6 s/ G6 M' A. S- A+ b代码如下:
, p' v" @9 }& Y
<!doctype html>* G) `& {2 T2 E1 v) w
<html>
0 T7 j  h' ~/ k. R- \; }7 c6 W3 [<head>' d4 F2 b2 U6 I! y/ _
<meta charset=utf-8>$ n" f9 J5 P1 N
<title>canvas钟表</title>' e3 t; s9 e$ z
<meta name=keywords content=>
& ]' t/ T7 _/ k- }8 s<meta name=author content=@my_programmer>
+ U# _5 t/ |/ u+ q+ h. O! d<style type=text/css>- c6 O* B& s; r  n" _1 B3 u
body{margin:0;}
! {# ]" T; H$ Z; q4 f2 O4 x& k</style>- \' u5 R8 M7 u2 x9 Z9 K7 f
</head>
! ]' G# Q& W" {1 M2 x! T8 I7 ^<body onload=run()>2 I/ w4 q$ L3 n. e; F/ A; L
<canvas id=canvas width=400 height=400 style=border: 1px #ccc solid;>如果你看到这段文字,说明你的浏览器弱爆了!</canvas>/ D% [( F+ v2 U) S/ j
<script>
2 K2 Z2 u1 ~0 [window.onload=draw;
) q# b, q2 U, O' o$ j- k" O# Hfunction draw() {
% i! B0 R' {' [8 {var canvas=document.getelementbyid('canvas');
$ ~$ g& E3 \1 Z  z, }/ d5 A( zvar context=canvas.getcontext('2d');& h% O7 I+ Z$ s/ @
context.save(); ///////////////////////////////////保存
& |- T* u6 ], a2 Qcontext.translate(200,200);
4 Z% ?# q3 V' _var deg=2*math.pi/12; - Z( ]% H" ~) l4 b+ p2 Y
//////////////////////////////////////////////////表盘. G( c; t2 l3 r$ j: w4 x1 ~" T+ r
context.save();
( t% s% F0 k% Q7 m7 \0 J$ \context.beginpath(); 3 D3 {$ Z% z2 ]. [
for(var i=0;i<13;i++){5 d7 N9 d6 u( o1 \" ]4 E8 o
var x=math.sin(i*deg);6 Y* j8 p1 B5 F5 ^0 V1 c2 c
var y=-math.cos(i*deg);
0 I- _5 M3 b# Q/ w- D7 Ccontext.lineto(x*150,y*150);
! g& i" [# |% T: M$ y+ W- F8 z% S}1 i0 c1 V) T* b' h9 ~8 w  c: D8 z7 L/ n
var c=context.createradialgradient(0,0,0,0,0,130);
. V7 L( K5 a0 L6 Y  sc.addcolorstop(0,#22f);
& v6 l: D8 s8 x- n3 M" nc.addcolorstop(1,#0ef)4 B0 h/ u# H+ l7 t, d; U0 R0 b5 \+ ^
context.fillstyle=c;
* M! _' V6 W3 {2 N3 {context.fill();
) f- g4 i, w# z9 @context.closepath();
/ o; O( o8 ?. C1 }+ Bcontext.restore();
) d. w5 X$ P* p9 o/ l6 I//////////////////////////////////////////////////数字6 F7 i. R; d9 O+ K# J# L8 [8 @! A
context.save();
/ G0 l( t/ j4 P$ Y) {6 Acontext.beginpath();  M% i7 z8 `$ n0 U
for(var i=1;i<13;i++){1 ?1 B& s0 J' s
var x1=math.sin(i*deg);6 j1 Z& m  L4 A
var y1=-math.cos(i*deg);& l# @: B2 N  r9 K9 k4 K
context.fillstyle=#fff;6 h1 `* L! [( i
context.font=bold 20px calibri;
9 x4 V: g& O$ }. }context.textalign='center';; x8 ^( U% V$ P6 z4 B4 j, I3 ?& }8 j0 |
context.textbaseline='middle';
8 H: f1 |# z3 U8 z0 vcontext.filltext(i,x1*120,y1*120); ' C' `& b' n. X: T
}
8 l+ b$ |9 K( j5 d$ gcontext.closepath();
8 i% Y* G' E' G7 {( jcontext.restore();
5 _" G! G3 Y! w' |2 C//////////////////////////////////////////////////大刻度1 c& r9 b; ^7 E
context.save();. A) G* h! J1 a2 E
context.beginpath();
7 i: @' w2 i6 U- ^for(var i=0;i<12;i++){
/ T' J* ?7 c% U4 m# Hvar x2=math.sin(i*deg);
. I. _8 u( D) c& P8 \' svar y2=-math.cos(i*deg);( A+ t' ^& [- T& v& L
context.moveto(x2*148,y2*148);5 d# a$ L+ D0 v/ R9 S
context.lineto(x2*135,y2*135); 8 @4 C* o8 \6 C" t7 Z+ ]
} ) t$ X/ F! T' |+ e( O
context.strokestyle='#fff';3 l* \! {" r! O. N2 A, E5 U/ _
context.linewidth=4;
0 x# e' d( z4 |2 B! }( ?context.stroke();
2 ^) g) b  x! l1 ?- u4 V6 Kcontext.closepath();
3 p7 w2 t9 m+ S. [# ?3 }- Fcontext.restore();
, Z% J9 E1 @$ ~. C! b//////////////////////////////////////////////////小刻度. k5 p' G8 h' r6 U& ?
context.save();$ Z% c- K, `4 D
var deg1=2*math.pi/60;
9 F, ?5 d6 }/ u: |* bcontext.beginpath();
1 a5 k" |8 `. K% F3 Bfor(var i=0;i<60;i++){, I. V, S& U( D. g
var x2=math.sin(i*deg1);6 p$ L3 u8 G* b7 T
var y2=-math.cos(i*deg1);
- ?# x4 }% y9 [" qcontext.moveto(x2*146,y2*146);
% w6 v9 O' |# N; @+ h% T; @3 xcontext.lineto(x2*140,y2*140);
$ X& _* p9 R3 g9 }" C% b}
7 X! N5 Y7 Q4 x. E1 A" ~. r$ Icontext.strokestyle='#fff';1 a9 D9 w! Z7 h: |
context.linewidth=2;+ k4 [' v3 I; e3 p. z) ?3 V
context.stroke();
5 M2 V7 @/ ~1 u$ Econtext.closepath();
( D( z" k1 W7 k& O/ gcontext.restore(); . o" X. R$ f# K4 a
///////////////////////////////////////////////////文字
0 L* P/ G1 m- V0 H8 X* scontext.save();
) E! e+ n( M" [  p' ccontext.strokestyle=#fff;
6 C+ N( u- _! i) c* o! R  F+ Ycontext.font=' 34px sans-serif';
4 ]+ F' j5 s; N/ W: m. v+ tcontext.textalign='center';* o1 `- |1 ]# z. e$ `: E: p4 X7 `
context.textbaseline='middle';
' _' p7 G, a9 N9 P" E+ }context.stroketext('canvas',0,65);
0 d5 S4 z: G" d  ]context.restore(); $ u/ M0 c6 j+ R0 ?: j& }7 ^
/////////////////////////////////////////////////new date
7 ~" s3 t; l+ Y4 xvar time=new date();- V5 l  w7 J2 P% k- S2 B
var h=(time.gethours()%12)*2*math.pi/12;
( k: r5 B3 }4 Q6 k* L5 s' Gvar m=time.getminutes()*2*math.pi/60;2 Y# B, |+ a, j; S+ ?" `; Y
var s=time.getseconds()*2*math.pi/60;</p> <p>////////////////////////////////////////////////时针
1 E% r5 Y( n( G7 P2 }# H/ O/ j  Wcontext.save();9 ?( Z6 C8 G: N
context.rotate( h + m/12 + s/650) ;
$ `) e6 ^9 h+ F0 J* {  Rcontext.beginpath();$ `* }' J$ R( z( r6 O3 [
context.moveto(0,6);  n$ T4 i6 y" y  E) Z, Y% S" @7 H
context.lineto(0,-85);
* v/ b4 d; s& s6 a6 D/ Gcontext.strokestyle=#fff;* t, \( t7 q5 a3 U2 W: A/ f
context.linewidth=6;: T7 h" T: U: M2 r/ E
context.stroke();1 p5 z# i* z, k/ C
context.closepath();  m3 ]$ }; R& B* ~3 R7 x
context.restore();
8 k1 L9 H3 m, m$ Z* z8 h  S//////////////////////////////////////////////分针' p+ O9 Z! s- @: I' Q
context.save();3 W( P+ P" ^: o2 j7 a
context.rotate( m+s/60 ) ;
) _8 ?: Z. G7 o7 rcontext.beginpath();
3 E  T, R) U3 Zcontext.moveto(0,8);
4 L4 Y5 S9 d6 O) |! `! r" Vcontext.lineto(0,-105);! P0 a1 n' j* D( z  e
context.strokestyle=#fff;/ h1 ?8 a: \: V0 B& D# t
context.linewidth=4;9 q) U) I5 K( v# q
context.stroke();5 V( @# M) V) N
context.closepath();
+ F7 J  y- ?- ^6 s; `context.restore();
2 N' I; ?, |$ D; w% ~  B/////////////////////////////////////////////秒针
* j7 Q; B5 M! _. p# h2 v9 O5 _context.save();
6 o1 `/ ~# F( ?! X& ycontext.rotate( s ) ;0 q' j! N; y4 `% K+ A
context.beginpath();+ f* t+ G7 Y" V' w. t$ g
context.moveto(0,10);
( D0 ^5 J9 P5 L, K- ]7 L1 t6 Mcontext.lineto(0,-120);6 ~1 H6 T' z0 g3 N: n5 x% z
context.strokestyle=#fff;! ]- b  W9 |; q* N* x- s. E
context.linewidth=2;% l4 n# y$ T$ Y. f/ P
context.stroke();: R3 d6 h# H: `: b7 K2 Q5 g2 T
context.closepath();( G) l/ k* N& _2 Z8 r& y7 @) [
context.restore(); ) ^, e5 `: U; V- t! V, g6 e
context.restore();/////////////////////////////栈出" Y5 E6 s" R% _0 u) W9 W
settimeout(draw, 1000);/////////////////////////////计时器</p> <p>}</p> <p></script>
7 i/ `. u/ w: k. ?" s) }</body>
0 O9 k, o* ~. c$ e</html>
- o! n! E/ \% ^/ A3 K5 T% ~3 m) x9 b! J; o6 w0 _* d4 ~% F
更多网页制作信息请查看: 网页制作

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