返回列表 发新帖

使用canvas绘制超炫时钟

295.0k 9
swmozowtfl 发表于 2015-7-14 22:16:18|湖北 | 查看全部 阅读模式
先上效果图:/ j2 h- b' G8 Z0 |: I
. G/ y! H2 L6 s& N7 Y+ y
                               
登录/注册后可看大图

. H; Y. F' L- d( u7 K1 [代码如下:
- b' v- W0 `9 Q% r& c
<!doctype html>- B- E, \9 V. i& z7 ?
<html>
& {% O6 h+ }; u1 H) V; k! s. {<head>3 F! H/ V  [4 ?. Y+ ]' }4 p) D
<meta charset=utf-8>
. O3 ^7 z' r- ]+ ~; D' g2 |<title>canvas钟表</title>& X+ }: T+ n3 l9 a' Q0 @7 b
<meta name=keywords content=>; W: @; l4 M( e4 Z5 q- \9 Z
<meta name=author content=@my_programmer>
$ ^) r( y+ O; f$ o<style type=text/css>9 L" Y, _4 g9 x
body{margin:0;}8 |1 Y: ?1 m$ m' l- @
</style>6 A* c" ~, }0 e0 h- i. ~
</head>3 b" |  v: N5 N% D, f. k
<body onload=run()>
: H3 K' n. u+ W& h5 L7 n3 @<canvas id=canvas width=400 height=400 style=border: 1px #ccc solid;>如果你看到这段文字,说明你的浏览器弱爆了!</canvas>  p5 |- ~0 k) H, q$ I5 y# S9 F
<script>
5 u0 f6 h1 f7 H' u5 u' p& v! B. cwindow.onload=draw;
& C& `( D2 A0 W/ O" x/ t- y2 o; l& |! Efunction draw() {
' l6 }. t* {* F. c- b" s$ Jvar canvas=document.getelementbyid('canvas');! Y! x8 ~9 t/ H6 z
var context=canvas.getcontext('2d');
" d, G1 Z% B+ K# ~7 @: x( ]context.save(); ///////////////////////////////////保存
0 k% M! t2 W( E9 Ccontext.translate(200,200);
- E9 \. ?% |7 w" l& g0 B- Vvar deg=2*math.pi/12; 3 X. k& t5 W/ ^! R$ {+ m8 p1 D
//////////////////////////////////////////////////表盘3 I; e- w% l9 K* ]4 ?
context.save();
) g1 ]# o6 t$ P9 lcontext.beginpath(); 7 Z" q8 k* \2 H% e2 T1 ]
for(var i=0;i<13;i++){
3 I- x1 y0 K# ?$ I( b! P3 v& Vvar x=math.sin(i*deg);- z, G3 ?. j1 u
var y=-math.cos(i*deg);* u8 e* J9 r+ S% n/ g' M
context.lineto(x*150,y*150); ; I; U: Z  V! Z0 X
}8 o+ I( o) [; o- @6 L9 U  ^' a- C
var c=context.createradialgradient(0,0,0,0,0,130);% Q9 {0 z" r6 V* r* ]- j
c.addcolorstop(0,#22f);% B7 O0 V1 o2 l+ u/ l* ^
c.addcolorstop(1,#0ef)
6 M& B  @1 W; l  b7 n) qcontext.fillstyle=c;1 p; Y" a8 l: K
context.fill();% \6 q0 L* Y+ q* g2 N! S! X! t$ E
context.closepath();
; a& }3 M3 U" i2 Mcontext.restore(); 7 k3 c( Y+ l  S) }& A
//////////////////////////////////////////////////数字
$ C" v# L! b1 ?) o$ |* A( kcontext.save();
/ h0 B4 S! H& _$ w+ acontext.beginpath();
2 H9 q# _3 h( U0 R3 f2 ufor(var i=1;i<13;i++){
4 v2 f, O6 ~1 h; ?% `var x1=math.sin(i*deg);1 S& z9 M' l: {
var y1=-math.cos(i*deg);- k7 @) v( g2 m" M1 x! F
context.fillstyle=#fff;2 n- ^5 B" l: W! I4 i; B: {
context.font=bold 20px calibri;
; t* B  @. ?6 Xcontext.textalign='center';
. B- M# ?5 p) D9 C7 t# Ocontext.textbaseline='middle';3 w* Y. P: I5 [8 }
context.filltext(i,x1*120,y1*120); ' v9 b/ x, A9 u7 L* c3 g
}3 q1 b" q) d# h* S* `
context.closepath(); % w! V/ h; p/ y0 K5 V; x
context.restore(); 9 x  o, m2 D+ z
//////////////////////////////////////////////////大刻度
" s5 o5 i. J* n" Q3 acontext.save();
9 |) a' H, g- t/ _7 p: }& S/ ?context.beginpath();
: W# O; W# C5 y; a: kfor(var i=0;i<12;i++){
4 c( d3 c5 h2 E, K" G2 Cvar x2=math.sin(i*deg);
) ?$ r% l8 t% N- d' o0 D5 Q- C( Rvar y2=-math.cos(i*deg);5 G# p4 Y+ Z, z1 @, q$ y6 v5 i# Q- K
context.moveto(x2*148,y2*148);
4 Z" A' w+ o( w7 R' t  Scontext.lineto(x2*135,y2*135); / R3 ]! b; d5 ~/ t& H) |8 i& ^1 y+ q
}
3 C. E7 w5 l( _. P+ f$ j( }1 J. y; qcontext.strokestyle='#fff';
2 N0 g  U( b/ I9 K& U9 F' Bcontext.linewidth=4;
  D& O; ~( ~7 l( Ccontext.stroke();
+ O% ^+ @9 M* [( D/ bcontext.closepath();
2 B4 I4 N6 r7 K# c" z1 }* jcontext.restore();
* ^7 m( u- _0 B0 f3 {. d4 N/ ^//////////////////////////////////////////////////小刻度
3 o. q# K& i4 Tcontext.save();
% j/ L3 i! T' ~7 Pvar deg1=2*math.pi/60;
# T, z) s  s3 c0 u8 {! t3 i( Tcontext.beginpath();
, F5 P* P4 z; U3 X4 h' x: Yfor(var i=0;i<60;i++){% b0 \1 `" U! S9 I
var x2=math.sin(i*deg1);
% f) d( I0 m& l7 U2 L; L+ ]5 v3 Kvar y2=-math.cos(i*deg1);
  d  m# s: A: Q& X7 |& vcontext.moveto(x2*146,y2*146);
2 w, U# ?1 C* M. }8 e9 ?context.lineto(x2*140,y2*140);
1 B6 E: {- B4 k3 S5 n% m" N}
5 D# [% E+ d3 `* d+ k0 acontext.strokestyle='#fff';& \( w" e5 {6 S
context.linewidth=2;
; K( p# [- F  F% ]* Z: mcontext.stroke();  L: l8 q; {7 I
context.closepath(); 8 M9 y6 }0 e# |" ~* W
context.restore();
6 d. o; t$ t+ P; S; g* ~7 O  }///////////////////////////////////////////////////文字
4 Y  L  p/ B) E8 G1 [context.save();) `) i2 y- l$ ]! b. Y2 Q
context.strokestyle=#fff;
: F% x* F8 y. q3 T: Z2 ncontext.font=' 34px sans-serif';/ \! O( G+ k: o  a0 G" S* R5 L' u
context.textalign='center';6 J+ t7 q0 T1 ~" A3 r) Y3 ]9 @
context.textbaseline='middle';
. J* h5 @  W9 vcontext.stroketext('canvas',0,65);
, d& S+ O  N; o+ y' ]( R; Dcontext.restore(); ) ~$ @9 l9 g5 u) V: o5 h
/////////////////////////////////////////////////new date& N" v2 ?$ U6 \) }0 h
var time=new date();
( V' F* o! y6 a& {3 }var h=(time.gethours()%12)*2*math.pi/12;7 H: Y, ~8 H" q& A# N  k) i
var m=time.getminutes()*2*math.pi/60;
0 z) @' P0 q- r6 ]var s=time.getseconds()*2*math.pi/60;</p> <p>////////////////////////////////////////////////时针: p5 T6 O% }* x7 F7 {6 |0 _
context.save();# F& V. _( j5 v; A( k
context.rotate( h + m/12 + s/650) ;; p4 T4 W0 ^- r" l( I& h
context.beginpath();' |, T1 s/ {: H. {
context.moveto(0,6);
; }* {' {' u, `0 ?5 s6 x. }8 mcontext.lineto(0,-85);3 W' z) O" l  I7 V  Q
context.strokestyle=#fff;: c' V! I- L6 ~$ f
context.linewidth=6;
3 [) [0 g1 l0 k* X7 s5 scontext.stroke();' J' Y; Y' l# z4 g
context.closepath();1 P/ i% v+ B& V3 I6 o
context.restore();
3 y) R& R! E- ~5 T( w//////////////////////////////////////////////分针0 ~# T, b# B6 f
context.save();5 c* v2 E6 R9 z6 |
context.rotate( m+s/60 ) ;* B5 k* e; \' c7 j: U
context.beginpath();
' W( c# P5 u. U8 ocontext.moveto(0,8);
9 q( K! u: I! h2 fcontext.lineto(0,-105);
& A  F! {2 \. J& ^* I2 H% r+ T8 Hcontext.strokestyle=#fff;
) N+ @5 m% f' y, C& N) \1 gcontext.linewidth=4;3 ~% I- ^+ ]/ v  n- W$ P% Y
context.stroke();) k" t" H$ P) ?, s9 h
context.closepath();
# a- _8 u. Y. q" ~0 l) @context.restore();% M. Z* i7 G; f: N) _2 I$ t8 I
/////////////////////////////////////////////秒针* ]6 ?% G! a6 q6 q) e
context.save();
( w( c* e5 c( [2 S1 g2 `context.rotate( s ) ;& Y+ v$ [  t' p+ c% U5 S6 H* Q
context.beginpath();
2 \" ]  S( G4 T9 Zcontext.moveto(0,10);! `2 N) C9 R( a+ ^! C8 O/ T. n0 _
context.lineto(0,-120);
; c' @+ N3 M( R$ P' ucontext.strokestyle=#fff;. y- ?8 Z  O% {# n7 L1 D
context.linewidth=2;
& ]/ `, i* Y2 n. [# x+ g' Kcontext.stroke();" p; u2 k7 P/ [& ^
context.closepath();1 L6 H1 J: g' O) i% ^) \! J
context.restore(); ; H" v- S/ b: u$ q
context.restore();/////////////////////////////栈出
  I9 M7 r2 w2 ?3 a- x9 Z! Y  Q' Isettimeout(draw, 1000);/////////////////////////////计时器</p> <p>}</p> <p></script>( {" J1 t! S9 N' t  P3 L5 Y
</body>
' M' n3 B, t8 a3 |0 y0 W- d% {- Y+ H</html>1 G4 I0 e% u! a+ Q
0 |, i. n& N  Z$ q: [
更多网页制作信息请查看: 网页制作

回复|共 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技术交流平台 版权所有 All Rights Reserved. Powered by Discuz! X5.0 鄂ICP备15006301号-5|鄂公网安备 42018502006730号
关灯 在本版发帖 扫一扫添加QQ客服 返回顶部
快速回复 返回顶部 返回列表