canvas实现环形倒计时

Posted by Mia Yu on March 13, 2017

之前项目中有做过一款环形计时器,当时是纯用css3实现的,动画效果不错,但有一个非常致命的缺点:通用性差,动画时长只能在css中写死,如果遇到需要统计不同时长的情况下,就必须根据不同的时长写不同的样式。

所以现在我换用js和canvas实现环形计时器并将其封装成组件,我们调用这个组件时,只需要传一些配置属性,就可以根据不同需求来展示,非常灵活又实用,具体配置如下:

 let props={
  width:100,  //cavas画布宽度
  height:100,  //画布高度
  radius:20,  //计时器的半径
  time:10*1000,  //需要倒计的时长
  ringColor:'#999',  //进度条的颜色
  defaultColor:'#333' ,  //默认底色
  lineWidth: 5  //进度条的宽度
}

具体实现代码可以访问:https://github.com/yomonah/react-demo/tree/master/src/components/circle_timer/circle_timer1

基于这个计时器我还写了另一个组件,类似于音乐播放器的效果,可以手动开始/暂停:

配置信息基本是一致的,详细代码可以访问: https://github.com/yomonah/react-demo/tree/master/src/components/circle_timer/circle_timer2

我的github上会不定时更新一些小组件,感兴趣的可以克隆下来玩玩: https://github.com/yomonah/react-demo