您现在的位置:首页 >> 前端 >> 内容

如何使用canvas实现倒计时效果?

时间:2018/1/18 14:54:01 点击:

  核心提示:假设现在离新闻联播开始还有3分钟21秒。现在要通过canvas实现这个以03:21开始以00:00结束的倒计时。问题的关键在于,如何通过canvas绘制03:21 、02:36。简化问题,我们可以使用...

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

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

绘制数字和符号“:”

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

  var arc=[
   [0,0,1,1,1,0,0],
   [0,1,1,0,1,1,0],
   [1,1,0,0,0,1,1],
   [1,1,0,0,0,1,1],
   [1,1,0,0,0,1,1],
   [1,1,0,0,0,1,1],
   [1,1,0,0,0,1,1],
   [1,1,0,0,0,1,1],
   [0,1,1,0,1,1,0],
   [0,0,1,1,1,0,0]
  ]

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

如何使用canvas实现倒计时效果?

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

如何使用canvas实现倒计时效果?

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

canvas绘制原型的函数如下

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

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

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

绘制结果如下图

如何使用canvas实现倒计时效果?

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

如何使用canvas实现倒计时效果?

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

注意的点

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

作者:网络 来源:JiangLittl