vue圆环形进度条组件

1.先来个圆形背景,为了后续方便定位,请给它安排上position属性。

CircleProgress.vue






vue圆环形进度条组件_第1张图片
在调用的父组件里设置了长宽为100px
2.新增两个div,一个用来做进度条,另一个用来放内容。



3.进度条部分
  1. 将圆分割成四等分,每一份都占四分之一(0.25),角度都为90度。顺时针写样式。
vue圆环形进度条组件_第2张图片
block1
vue圆环形进度条组件_第3张图片
block2
vue圆环形进度条组件_第4张图片
block3
vue圆环形进度条组件_第5张图片
block4

2.都给他们加上背景色,为进度条的颜色。

#64d3f6

3.每一块里都加上遮挡层,遮挡层颜色与背景色相同,设定样式以背景圆的圆心为旋转点。

第一块的旋转中心应该为左下角

4.给每一块的modal都加上v-if属性,只有当比例小于这一块才显示modal层。

例如:进度(rate)为0.25,第一块modal不显示(不满足rate小于0.25),第二块modal显示(rate < 0.5),
第三块modal显示(rate < 0.75),第四块modal显示(rate < 1);

5.加上动态样式

① 顺时针第一块,右上角那块(范围应该为0~0.25):

  • 如果进度(rate)大于等于0.25,则不显示与背景色一样为紫色的modal层。
  • 如果进度(rate)在0~0.25之间,比如0.125,要显示与背景色一样为紫色的modal层,且modal层只显示一半,且为后半部分,即顺时针旋转(rate * 0.25 * 90deg)。
modal1层显示了,且旋转了45°

② 顺时针第二块,右下角那块(范围应该为0.25~0.5):

  • 如果进度(rate)大于等于0.5,则不显示与背景色一样为紫色的modal层。
  • 如果进度(rate)小于0.25,要显示与背景色一样为紫色的modal层,且不用旋转任何角度。
  • 如果进度(rate)在0.25~0.5之间,比如0.3,要显示与背景色一样为紫色的modal层,且modal层顺时针旋转((rate - 0.25) * 0.25 * 90deg)。
modal2显示了,且旋转了18°

③ 顺时针第三块,左下角那块(范围应该为0.5~0.75):

  • 如果进度(rate)大于等于0.75,则不显示与背景色一样为紫色的modal层。
  • 如果进度(rate)小于0.5,要显示与背景色一样为紫色的modal层,且不用旋转任何角度。
  • 如果进度(rate)在0.5~0.75之间,比如0.7,要显示与背景色一样为紫色的modal层,且modal层顺时针旋转((rate - 0.5) * 0.25 * 90deg)。
vue圆环形进度条组件_第6张图片
modal3显示了,且旋转了72°

④ 顺时针第四块,左上角那块(范围应该为0.75~1):

  • 如果进度(rate)大于等于1,则不显示与背景色一样为紫色的modal层。
  • 如果进度(rate)小于0.75,要显示与背景色一样为紫色的modal层,且不用旋转任何角度。
  • 如果进度(rate)在0.75~0.1之间,比如0.8,要显示与背景色一样为紫色的modal层,且modal层顺时针旋转((rate - 0.75) * 0.25 * 90deg)。
vue圆环形进度条组件_第7张图片
modal4显示了,且旋转了18°

所以可以将上述四个显示的modal层旋转的角度的计算方式写成一个函数,根据是第几块和当前的进度比例(this.rate)来得到角度:






6.说好的圆环形进度条呢?怎么变成圆饼啦?在content里加上圆,挡住中心部分






像这样调用即可:

 

多个进度浏览图

图1
vue圆环形进度条组件_第8张图片
图2

完整代码Github地址

https://github.com/LiaPig/vue-circle-progress

你可能感兴趣的:(vue圆环形进度条组件)