使用canvas实现倒计时效果

淩亂°似流年 2022-06-01 02:52 388阅读 0赞

假设现在离新闻联播开始还有3分钟21秒。现在要通过canvas实现这个以03:21开始以00:00结束的倒计时。

问题的关键在于,如何通过canvas绘制03:21 、02:36。简化问题,我们可以使用canvas绘制0、3、”:”、2、1形状的图画,时间改变,再次重新绘制即可。

绘制数字和符号“:”

以绘制数字0为例,0的绘制可以借助一个二维数组。

  1. var arc=[
  2. [0,0,1,1,1,0,0],
  3. [0,1,1,0,1,1,0],
  4. [1,1,0,0,0,1,1],
  5. [1,1,0,0,0,1,1],
  6. [1,1,0,0,0,1,1],
  7. [1,1,0,0,0,1,1],
  8. [1,1,0,0,0,1,1],
  9. [1,1,0,0,0,1,1],
  10. [0,1,1,0,1,1,0],
  11. [0,0,1,1,1,0,0]
  12. ]

这里,将这个二维数组放在10*7的表格中,格子中的值为1就画圆,为0则不做 处理。

SouthEast

每个格子的宽高为10,圆的半径为4,圆的中心与格子的中心重合。

SouthEast 1

假设这个表格左上角的坐标为原点(0,0),根据上面给出的二维数组,绘制数字0

canvas绘制原型的函数如下

  1. context.arc(x,y,radius,startAngle,endAngle,anticlockwise);

一共有6个参数,x为圆心横坐标,y为圆心纵坐标,radius为半径,startAngle为开始角度,endAngle为结束角度,anticlockwise为是否逆向进行绘制。

  1. for(var i=0;i<10;i++){
  2. for(var j=0;j<7;j++){
  3. if(arc[i][j]==1){
  4. // 画圆
  5. context.beginPath();
  6. context.arc((10*j+5*j),(10*i+5*i),4,0,2*Math.PI,false);
  7. context.fillStyle="#def";
  8. context.fill();
  9. context.closePath();
  10. }
  11. }
  12. }

绘制结果如下图

SouthEast 2
这里看到数字0的上边与左边的小圆点显示不完整,这是因为将表格的左上角坐标设定为(0,0)了,为了显示完整,将左上角坐标稍作调整即可。

SouthEast 3

数字0绘制完毕,剩余的3、:、2、1的绘制方式之相同

注意的点
  • 绘制时数字符号之间需要设置一定的间隔,防止黏连在一起。
  • 时间改变,需要重新绘制
  • 根据剩余时间计算每个位置需要绘制的数字(因为将显示的时间拆为5部分绘制,而“:”保持不变)。
  • 从0-9以及“:”的都保存在一个多元数组中,加上canvas绘制圆形的参数较多,以及各部分之间需要一定的间隙,所以在编写代码时要细心再细心。
查看示例

这里

发表评论

表情:
评论列表 (有 0 条评论,388人围观)

还没有评论,来说两句吧...

相关阅读

    相关 用javascript实现计时效果

    用Javascript实现倒计时效果,供大家参考,具体内容如下 正在学习大前端中,有代码和思路不规范不正确的地方往多多包涵,感谢指教 在某些商城网站中,我们常常可以看见其网