程序员教你如何用canvas自适应圆形时钟绘制

Posted 学习web前端

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序员教你如何用canvas自适应圆形时钟绘制相关的知识,希望对你有一定的参考价值。

效果演示

最终自适应圆形时钟的效果如下所示

程序员教你如何用canvas自适应圆形时钟绘制

功能分析

下面来分析一下该圆形时钟的功能

1、静态背景

对于时钟来说,背景是不变的,包括外层钟框、内层圆点及数字、以及中心点的固定按扣

2、动态时钟

时态的动态,表现在秒针、分针、时针随着当前时间的变化的变化。开启一个每秒变化1次定时器,秒针与当前的时间的秒数保持一致,分针的变化与当前的秒数和分钟数都有关,时针的变化与当前的分钟数和小时数都有关

3、自适应

要做到时钟自适应,需要将时钟内部的尺寸绘制与时钟整体的宽高相关联,而不能设置为固定值

下面是一张时钟的简易分析图

程序员教你如何用canvas自适应圆形时钟绘制

静态时钟

下面来实现静态的时钟背景,包括外层钟框、内层圆点及数字、以及中心点的固定按扣,以时钟尺寸为200*200为基准,则半径为100,通过translate()将圆心点调整为(0,0)点

初始设置

由于外面经常要用到R和cxt.lineWidth,所以将其保存为变量

程序员教你如何用canvas自适应圆形时钟绘制

外层钟框

为了将外层钟框不超出canvas区域,则其半径设置为R-cw/2,线条宽度与半径成比例

程序员教你如何用canvas自适应圆形时钟绘制

内层数字

在距离圆心点0.8R-cw/2处,绘制12个数字,表示当前的分钟数,数字的字体大小与半径成比例

程序员教你如何用canvas自适应圆形时钟绘制

内层原点

在距离圆心点0.9R-cw/2处,绘制60个圆点,表示当前的秒数,当前秒数与分钟数处于同一角度时,表示为大圆点(半径为cx/5),否则为小圆点(半径为cx/8)

程序员教你如何用canvas自适应圆形时钟绘制

【绘制中心点的固定按扣】

cxt.beginPath();

最终,静态背景封装为函数drawStatics(),代码如下

程序员教你如何用canvas自适应圆形时钟绘制

程序员教你如何用canvas自适应圆形时钟绘制

静态效果如下

程序员教你如何用canvas自适应圆形时钟绘制

动态效果

下面来分为时针、分针、秒针来进行动态效果

秒针

开启一个每秒变化1次定时器,秒针与当前的时间的秒数保持一致  

程序员教你如何用canvas自适应圆形时钟绘制

分针

分针的变化与当前的秒数和分钟数都有关

程序员教你如何用canvas自适应圆形时钟绘制

时针

时针的变化与当前的分钟数和小时数都有关

程序员教你如何用canvas自适应圆形时钟绘制

完整代码

现在,需要对代码进行调整,因为canvas是按照代码顺序进行绘制的,所以代码顺序应该是,静态背景(时钟外框、圆点及数字) -> 动态效果(秒针、分针、时针) -> 中心按扣

因此,需要将中心按扣的代码从静态背景函数drawStatics()中分离出来,并重新安排代码顺序

由于浏览器的定时器存在误差,因此设置为1000ms并不合适,由于系统卡顿等原因,可能会跳过某次效果,因此,设置为500ms

最终完整代码如下所示

程序员教你如何用canvas自适应圆形时钟绘制

程序员教你如何用canvas自适应圆形时钟绘制

感谢  ·  转发 欢迎大家留言



以上是关于程序员教你如何用canvas自适应圆形时钟绘制的主要内容,如果未能解决你的问题,请参考以下文章

android中,如何用canvas绘制透明?

高级绘图MATLAB应用实战系列(八十)-圣诞前夜,想表白女神?教你如何用MATLAB绘制圣诞树动态图(附MATLAB代码)

高级绘图MATLAB应用实战系列(八十)-圣诞前夜,想表白女神?教你如何用MATLAB绘制圣诞树动态图(附MATLAB代码)

H5之canvas-绘制动态时钟

神级程序员教你如何用四行代码画出一幅中国地图!Python就是牛逼

教你如何用Python制作花式条形图