返回列表 发新帖

使用canvas绘制超炫时钟

295.1k 9
swmozowtfl 发表于 2015-7-14 22:16:18|湖北 | 查看全部 阅读模式
先上效果图:8 ^  ^+ ]# p5 `, a/ p8 p2 I
! g0 M. _6 ?) C$ J! A. F
                               
登录/注册后可看大图
0 m: q$ Q' h0 Q1 Q
代码如下:& o& f. W9 B9 [
<!doctype html>
( d; q/ @8 {$ D" N<html>$ A& d9 h5 j' P9 T. g8 l2 O7 _
<head>
" s. Y) {( ]7 f8 e/ y7 h1 k: e% w( g<meta charset=utf-8>1 O% x/ @9 j. c! t
<title>canvas钟表</title>
: g' e! E0 l9 Y; D<meta name=keywords content=>& u% c. _& E! n/ O: A+ b7 x
<meta name=author content=@my_programmer>
7 |. A5 U( P" G5 u2 p* }<style type=text/css>8 L/ R0 ]" k  I; ^$ k' G+ t( _
body{margin:0;}
2 }5 j$ X0 y) @7 a  ~" k3 M# I</style>( \8 `& r/ D  Y# m. C0 n
</head>
8 j& h. E  g- Q" U$ ~0 z1 A<body onload=run()>: ~3 ?+ u& L; }: Q0 T+ t( n" @& [
<canvas id=canvas width=400 height=400 style=border: 1px #ccc solid;>如果你看到这段文字,说明你的浏览器弱爆了!</canvas>' [/ M" _% f% e* f6 w
<script>' J. {9 N0 X  k* R
window.onload=draw;7 p' H( U/ g- u4 F3 [# r
function draw() {$ C3 T1 T8 C' }- Q8 k0 M' \
var canvas=document.getelementbyid('canvas');
2 z* O# s% o, `5 zvar context=canvas.getcontext('2d');
  Y& |* J# Q* }/ Z$ `# p0 Ncontext.save(); ///////////////////////////////////保存: K6 ?& P0 J8 o7 c0 |# h2 X
context.translate(200,200);
+ S8 N3 O! q* i' U; \! V9 Xvar deg=2*math.pi/12; ) b; M$ L3 w) B; M
//////////////////////////////////////////////////表盘
3 q( q! @  L* e7 }" S4 }1 h. Qcontext.save(); 9 u$ q2 A1 ^) k1 q; M  J1 q
context.beginpath();
7 a8 X3 q( |& C2 S( {' q2 Kfor(var i=0;i<13;i++){
' L" G8 E* ~" o0 u7 w- Avar x=math.sin(i*deg);
% h0 B. N: }  fvar y=-math.cos(i*deg);
) f7 O8 A5 e) k. bcontext.lineto(x*150,y*150);
% O2 q& A( d6 [6 Q' t) @}
! _+ v7 S2 T# d2 t8 r% C2 {var c=context.createradialgradient(0,0,0,0,0,130);6 w* j; G6 |* _. L/ E- M) |
c.addcolorstop(0,#22f);
7 M& l2 l& X  W; i1 n+ W: ^* Sc.addcolorstop(1,#0ef)
: a( l# S: `  @2 M% ^. jcontext.fillstyle=c;
: @/ Y; V; W- W7 B3 vcontext.fill();
+ p5 G+ n2 k5 i) O1 B# O  qcontext.closepath(); + r( E% x  X4 i& h8 _! v4 K
context.restore();
4 f* |9 f$ d7 Z; i" H/ A//////////////////////////////////////////////////数字$ a; m# K- K* x1 ^
context.save();
3 Q8 ]+ s1 Y; ?context.beginpath();' }1 t! g, `4 d; {' Z+ l( G+ m8 @3 l
for(var i=1;i<13;i++){3 t! T5 x+ A8 Z7 g
var x1=math.sin(i*deg);
: M6 y2 [" ^9 r- {- t+ fvar y1=-math.cos(i*deg);
0 ]) x( N; ~% g0 P# Y& rcontext.fillstyle=#fff;4 q# n( k7 V9 ]7 E
context.font=bold 20px calibri;
+ B8 k' P( R+ acontext.textalign='center';% N8 |. c+ D# v* W
context.textbaseline='middle';8 q; @. G$ r- `* I+ l
context.filltext(i,x1*120,y1*120); " K2 [7 I# I& i
}
% |, i( W* e% D5 [  W! ccontext.closepath(); 2 z$ @4 H# f2 h+ _0 g
context.restore(); ! q& m& q( m* Y/ w5 Y& x8 z$ ?- e$ k
//////////////////////////////////////////////////大刻度
1 w  w5 c% }  G. ?' Vcontext.save();
" \! T2 l  F1 b( s) S% }context.beginpath(); * v# h+ U: b4 l; O! ?9 M
for(var i=0;i<12;i++){
% R8 e! z! k- g, n1 fvar x2=math.sin(i*deg);- ]* l) p9 O  j! k  m
var y2=-math.cos(i*deg);
0 D5 R* d) K8 I! icontext.moveto(x2*148,y2*148);
3 L6 D' }) g8 U" Fcontext.lineto(x2*135,y2*135); ; b- s, S1 X0 {( r* H
}
& X1 l0 E6 x4 _; o! t1 |8 I! v- x" hcontext.strokestyle='#fff';
) g6 P; A6 S' C- b4 H+ _* Zcontext.linewidth=4;4 |  x/ m4 [6 S: X* B+ ~  g
context.stroke();
3 g/ C3 |# O3 f, V0 |context.closepath();: P& S% D+ l% i8 u2 x+ Q6 l
context.restore();
! B! w0 z6 Z" {- R2 |1 {9 z" l//////////////////////////////////////////////////小刻度+ N7 E' |, u, t, F# n
context.save();% j7 K8 U- c0 @. s4 s$ q" p4 E( f
var deg1=2*math.pi/60;% {: u- L1 u+ ]  Z  z6 k$ m$ v% n
context.beginpath();
$ R. @! k) g! J" e# K' ^) S) Hfor(var i=0;i<60;i++){& u$ |7 q* V* R# E* H" S- m
var x2=math.sin(i*deg1);
1 @3 T- F* l. a: B0 ?  uvar y2=-math.cos(i*deg1);
3 S- W1 F0 D/ m, @6 t  w" Ucontext.moveto(x2*146,y2*146);
2 G" v+ [; z& c' ^' s5 [% Icontext.lineto(x2*140,y2*140); 2 A4 m) v$ b+ P. T6 C. X7 m
}
& r& ?' u& K# l' \$ [- w' i2 t# xcontext.strokestyle='#fff';# @6 h8 P9 E: o6 }, Y
context.linewidth=2;5 E; ?4 ]4 w+ Y1 u) @' v
context.stroke();& S, {9 _- j( R& m" _0 O- u
context.closepath();
* K+ a3 }1 l. y" }1 K8 d$ U: u  w: q0 ~context.restore(); & @. O+ Z2 z' t) n8 Z' E
///////////////////////////////////////////////////文字
0 ~) `: [; r9 r" o' l6 Acontext.save();& c( }' x. T/ W
context.strokestyle=#fff;: W4 `: S1 p) g9 q
context.font=' 34px sans-serif';! y* ?# b4 ?8 i* T# A, e2 l
context.textalign='center';7 G, M0 ^/ g( l& m6 A
context.textbaseline='middle';
' L! K+ g2 Q$ e3 J3 A( Ycontext.stroketext('canvas',0,65); 5 z) y" _4 L/ m* x* H! p' D' X! w
context.restore();
0 H# N! i, D+ b3 U0 u1 h  p/////////////////////////////////////////////////new date
! g! A$ m2 M; J% }  A* [4 mvar time=new date();
# |2 g- q  \- ]- m3 Bvar h=(time.gethours()%12)*2*math.pi/12;
" h; z4 L3 ^# gvar m=time.getminutes()*2*math.pi/60;
  Z* {! T% n. X3 A, kvar s=time.getseconds()*2*math.pi/60;</p> <p>////////////////////////////////////////////////时针% j' p  g6 [" Y, \: O% m' A. F
context.save();
- `& B( z( C# k1 b. P) |0 {context.rotate( h + m/12 + s/650) ;
1 E8 V( w9 I- y6 Econtext.beginpath();/ x' e  F- i( [" l) G
context.moveto(0,6);; A3 Y1 M- s# h, w! S6 ?- s
context.lineto(0,-85);$ r( e9 N7 y2 c
context.strokestyle=#fff;
( L, S% O  p  Icontext.linewidth=6;
4 d; K" ^( Q; G! c5 Scontext.stroke();
; }% b. g! V* ~4 q7 i, l/ jcontext.closepath();
2 R- h8 T2 ~/ `) X) ocontext.restore();% c! `- z+ Q  V' @- M
//////////////////////////////////////////////分针
# N# j; `( ?5 R# t& r8 Z/ Y/ V4 ?context.save();
0 K0 c8 D/ ?. F2 _- H1 X6 acontext.rotate( m+s/60 ) ;
6 H0 `$ L$ T& e: A! T- _$ t, u& econtext.beginpath();
. B" S# B0 }1 W0 x5 s9 B& Lcontext.moveto(0,8);
' W6 a5 \; U+ {% b1 Wcontext.lineto(0,-105);
3 p# b2 l% j6 h" A- U5 p, \% econtext.strokestyle=#fff;
! F) r' x( r, n3 E/ x* ^" Qcontext.linewidth=4;
& s3 P* y; x) @0 d0 ucontext.stroke();
( {" C6 ?/ Q- b8 i1 d7 I7 C3 V8 bcontext.closepath();
% j/ I* a  q3 g! J! l$ `1 |- H6 ycontext.restore();# ^8 @4 R! {. ?' W. ?
/////////////////////////////////////////////秒针
, M% b0 {8 d1 n8 Y% Scontext.save();  z, D, }# U+ F: Q# N+ f# ^" @
context.rotate( s ) ;- D& T* q( c3 v2 C4 ]/ H7 f
context.beginpath();9 X. G# N" p" e6 P& a# N* E, D
context.moveto(0,10);+ i- Y1 W* ?" c9 i, i. |
context.lineto(0,-120);
! Y( P4 _" T+ t7 U, v3 W$ gcontext.strokestyle=#fff;$ ?# W: N1 M8 {, e: `2 P
context.linewidth=2;1 |6 ~9 |0 r0 l$ G5 h0 b9 I
context.stroke();, u) W# r1 Q* w$ K1 }) w
context.closepath();
0 _. [4 P- f  ?- h( O) D2 Y) `# E1 `& ccontext.restore();
, z* K+ K2 ^; P% Q! ncontext.restore();/////////////////////////////栈出9 r) L2 c9 _! u, p) G1 l1 y
settimeout(draw, 1000);/////////////////////////////计时器</p> <p>}</p> <p></script>7 o  S2 S, f, s- K
</body>
! n5 h3 X; R( z1 P</html>0 {3 L+ t, n; Q+ @  W$ T

6 e! M9 D& K' P  o- F9 k更多网页制作信息请查看: 网页制作

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