当前位置:Gxlcms > css > CSS3+jQuery实现环形进度条的详解

CSS3+jQuery实现环形进度条的详解

时间:2021-07-01 10:21:17 帮助过:97人阅读

整体思路是:通过裁切(clip)产生两个半圆展示出静态的进度条,而后通过旋转(rotate)角度的变化产生动态效果。

先来回顾两个基础知识点

(1)css的一个不常见的属性:

  1. clip: rect(top, right, bottom, left);

这个属性规定了一个裁切的矩形,其中top和bottom所指定的偏移量是从元素盒子顶部边缘算起,right和left所指定的偏移量是从元素盒子左侧边缘算起(这里需要重点注意的是bottom和right的计算方式)。看下面这张超级清晰的图(直接把w3cplus的图搬过来了,带着水印不违规的吧?):

需要注意的是:clip属性只能在元素设置了“position:absolute”或者“position:fixed”属性时起作用。clip无法在设置“position:relative”和“position:static”上工作。

关于clip,

(2)CSS的另一个属性:

  1. transform: rotate(deg);

顺时针旋转一定的角度。

热身运动:我们来画一个右半圆

  1. //html
  2. <p class="pie-right">
  3. <p class="right"></p>
  4. <p class="mask"><span>0</span>%</p>
  5. </p>
  6. //css
  7. .pie-right {
  8. position: absolute;
  9. top: 0;
  10. left: 0;
  11. height: 200px;
  12. width: 200px;
  13. border-radius: 50%;
  14. background: red;//注意这是表示当前进度的颜色
  15. }
  16. .right {
  17. position: absolute;
  18. top: 0;
  19. left: 0;
  20. height: 200px;
  21. width: 200px;
  22. border-radius: 50%;
  23. background: blue;//注意这个才不是当前进度的颜色
  24. }
  25. .pie-right, .right {
  26. clip: rect(0, auto, auto, 100px);
  27. }
  28. .mask {//我是遮罩
  29. position: absolute;
  30. top: 25px;
  31. left: 25px;
  32. height: 150px;
  33. width: 150px;
  34. background: #fff;
  35. border-radius: 50%;
  36. text-align: center;
  37. }

效果如下:

此时,元素pie-right完全被元素right遮住了。

然后,我们来旋转一下:

  1. .right {
  2. transform: rotate(30deg);
  3. }

旋转后效果如下:

现在我们可以看到,旋转了30度时,露出的红色部分就是我们要的进度,这是pie-right元素的颜色。而蓝色部分right元素的颜色,是我们还未到达的进度。

正式开始

实现环形进度条意味着我们需要左右两个半圆,因此html结构要改变一下:

  1. //html
  2. <p class="circle">
  3. <p class="pie-right">
  4. <p class="right"></p>
  5. </p>
  6. <p class="pie-left">
  7. <p class="left"></p>
  8. </p>
  9. <p class="mask"><span>0</span>%</p>
  10. </p>
  11. //css
  12. .circle {//这个元素可以提供进度条的颜色
  13. position: absolute;
  14. height: 200px;
  15. width: 200px;
  16. border-radius: 50%;
  17. background: red;//注意这是表示当前进度的颜色
  18. }
  19. .pie-right, .pie-left { //这俩元素主要是为了分别生成两个半圆的,所以起作用的地方在于clip裁掉另一半
  20. position: absolute;
  21. top: 0;
  22. left: 0;
  23. height: 200px;
  24. width: 200px;
  25. border-radius: 50%;
  26. }
  27. .right, .left {
  28. position: absolute;
  29. top: 0;
  30. left: 0;
  31. height: 200px;
  32. width: 200px;
  33. border-radius: 50%;
  34. background: blue;//注意这个才不是当前进度的颜色
  35. }
  36. .pie-right, .right { //裁掉左边一半
  37. clip: rect(0, auto, auto, 100px);
  38. }
  39. .pie-left, .left { //裁掉右边一半
  40. clip: rect(0, 100px, auto, 0);
  41. }
  42. .mask {//我是遮罩 mask不用改 好欣慰
  43. position: absolute;
  44. top: 25px;
  45. left: 25px;
  46. height: 150px;
  47. width: 150px;
  48. background: #fff;
  49. border-radius: 50%;
  50. text-align: center;
  51. }

效果是介样滴:

此时进度是0,让我们来rotate一下,先旋转30度吧

  1. .right{
  2. transform: rotate(30deg);
  3. }

于是就变成了这样:【请始终记住,红色部分是当前进度。】

然后再旋转210度看看效果【210度就是右边完全旋转,左边再旋转30度】:

  1. .right{
  2. transform: rotate(180deg);
  3. }
  4. .left{
  5. transform: rotate(30deg);
  6. }

长这样:

最后的最后,当进度数值动态增加时,通过js去改变旋转的角度就可以实现进度条动态变化了。
进度数值每增加1,角度增加3.6度,还要注意的是,当进度小于50%时,左侧进度条没有变化,当大于50%,左侧进度条才开始改变。
我们可以写一个函数:

  1. function changeProcess(value) {
  2. var num = value * 3.6;
  3. if(num < 180) {
  4. $('.right').css('transform', 'rotate(' + num + 'deg)');
  5. } else {
  6. $('.right').css('transform', 'rotate(180deg)');
  7. $('.left').css('transform', 'rotate(' + (num-180) + 'deg)');
  8. }
  9. }

当进度值变化时,调用这个函数即可。

以上就是CSS3+jQuery实现环形进度条的详解的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行