用canvas 画布放大 坐标会改变吗_有趣的编程案例:用Html5 Canvas开发一个时钟(图文版)...

使用canvas做的一个时钟,先看效果

27546806ba7efbb58db9b33f7881ad17.gif

1、绘制时钟圆盘

绘制时钟圆盘,其实就是绘制一个圆,这个比较简单,代码如下:

87183a5574468573355c5f299d9f3166.png

2、标绘刻度

标绘刻度的难点在于确定刻度点的位置,这需要用到一些的几何知识,圆弧和三角函数。

3d43a96e6712aa64ff2d74ce00e17b34.png

如上图,要求圆上任意一点A的位置,通过三角函数可以推出:

x1=BC=cos(a)*AC

y1=BC=sin(a)*AC

其中AC就是半径,是已知的

现在我们要来确定角a的度数:

小时刻度:12个刻度,每一小时的角度为:360/12,弧度为:2π/12

分钟刻度:60个刻度,每一分钟的角度为:360/60,弧度为:2π/60

有了半径和角度我们就可以算出坐标,这样就可以绘制刻度了。注意js里面用的是弧度。

为了方便,我们用ctx.translate()把画布原点重定向到了圆心,这改变了画布的状态,为了不影响后续的绘制,每次绘完之后都要把画布恢复为原来的状态,具体操作就是:重定向画布原点之前,用ctx.save()保存画布状态,绘制完成之后,用ctx.restore()恢复之前保存的画布状态。

//保存画布当前环境状态ctx.save();//重定向画布原点ctx.translate(250,250);//绘制代码......//恢复之前保存的状态ctx.restore();

绘制小时刻度代码

f57723154b7493c47ec839ae7d350476.png

同理,绘制分钟刻度就简单,把12换成60就可以了。

绘制分钟刻度代码

5dd7de3517f107bb8a9d160b0fcba6e7.png

3、画时针

时针、分针、秒针都是和当前时间有关,所以先要获取当前时间的小时数、分钟数、秒数。

//得到当前时间var now=new Date();//当前小时数var hour=now.getHours();//当前分钟数var minute=now.getMinutes();//当前秒数var second=now.getSeconds();hour=hour+minute/60;

画时针时,我们先画出指向12点的时针:

//指向12点的时针ctx.beginPath();ctx.lineWidth=8;ctx.lineCap="round";ctx.moveTo(0,10);ctx.lineTo(0,-120);ctx.stroke()

之后每一个时刻度点的时针就是把指向12点的时针旋转一定的度数:

//旋转度数ctx.rotate(hour*2*Math.PI/12);

绘制时针代码

f05e86a22b845e9c0f449bf6eb6d0773.png

同理,时针绘制好之后,分针和秒针也就简单,直接看代码。

绘制分针代码

9278c56fe9bec6222a88d0d2c760c203.png

绘制秒针代码

62942d3b6180d49a66dd001ca83cc349.png

为了好看我们再画一个中心点。

绘制中心点代码

aa9a77ed8801dc7a922fb7ebde7aa45f.png

最后,为了让时钟实时转动,需要加一个定时任务,每秒执行一次。

//一秒钟执行一次setInterval(clock,1000);

还要注意,每次重绘都要清除画布:

 ctx.clearRect(0,0,canvas.width,canvas.height);

最终完整的代码逻辑如下:

c1d4a4542ea6c820266db9e1f493b356.png

这样一个时钟就完成了,如果想看更详细的操作,推荐观看视频版。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值