svg实现环形进度条

实现效果图:
在这里插入图片描述

svg相关知识

这里只介绍本次用到的元素,更多详情:SVG:可缩放矢量图形

  • defs:定义需要重复利用的图形元素
  • linearGradient:定义线性渐变,用来图形元素的填充或描边使用
  • stop:元素或者元素的子元素,用来描述渐变色的坡度
  • circle:基于圆心和半径创建圆形
  • cx:定义中心点的x坐标
  • cy:定义中心点的y坐标
  • r:定义圆的半径
  • fill:(对于形状元素)用来定义内部颜色
  • stroke:图形外轮廓颜色
  • stroke-width:外轮廓宽度
  • stroke-dasharray:描边的点划线的图案范式(线段,直线。。。)
  • stroke-linecap:开放自路径两端的形状(平角,圆角)
  • transform:用来设置动画(非svg属性)

实现代码

1. 定义一个可复用的渐变色

<defs>
    <linearGradient id="color">
        <stop offset="0%"  stop-color="#229453"/>
        <stop offset="50%"  stop-color="#66c18c"/>
        <stop offset="100%" stop-color="#b9dec9"/>
    </linearGradient>
</defs>

2. 增加一个外圈的圆,用来包住进度条(旋转整个圆,使缺口朝下)

<circle cx='160' cy='160' r='140' stroke='#999999' stroke-width="20" fill="none" stroke-dasharray="659,300" stroke-linecap="round" transform="rotate(135, 160, 160)"></circle>

3. 增加一个内部的圆,当进度条背景

<circle cx='160' cy='160' r='140' stroke='#ffffff' stroke-width="10" fill="none"  stroke-dasharray="659,300" stroke-linecap="round" transform="rotate(135, 160, 160)"></circle>

4. 增加进度条的圆(动画是为了有进度条移动的效果)

<circle id="circle" cx='160' cy='160' r='140' stroke='url(#color)' stroke-width="10" fill="none" style="stroke-dasharray: 0,900; transition: stroke-dasharray 2s" stroke-linecap="round" transform="rotate(135, 160, 160)"></circle>

5. 写一点js代码来改变进度条长度

const circle = document.getElementById('circle')
setTimeout(()=> {
  circle.style.strokeDasharray = '600,500'
}, 2000)

完整代码

<div>
      <svg style="background: #ffffff" width="320" height="320"  viewBox="0 0 320 320">
        <defs>
            <linearGradient id="color">
                <stop offset="0%"  stop-color="#229453"/>
                <stop offset="50%"  stop-color="#66c18c"/>
                <stop offset="100%" stop-color="#b9dec9"/>
            </linearGradient>
        </defs>
        <circle cx='160' cy='160' r='140' stroke='#999999' stroke-width="20" fill="none" stroke-dasharray="659,300" stroke-linecap="round" transform="rotate(135, 160, 160)"></circle>
        <circle cx='160' cy='160' r='140' stroke='#ffffff' stroke-width="10" fill="none"  stroke-dasharray="659,300" stroke-linecap="round" transform="rotate(135, 160, 160)"></circle>
        <circle id="circle" cx='160' cy='160' r='140' stroke='url(#color)' stroke-width="10" fill="none" style="stroke-dasharray: 0,900; transition: stroke-dasharray 2s" stroke-linecap="round" transform="rotate(135, 160, 160)"></circle>
      </svg>
    </div>
const circle = document.getElementById('circle')
setTimeout(()=> {
 circle.style.strokeDasharray = '600,500'
}, 2000)
  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要创建一个SVG圆环进度条,可以使用<path>元素和stroke-dasharray属性来定义圆弧的虚线样式。以下是一个简单的示例代码,展示了如何创建一个50%的圆环进度条: ```html <svg width="100" height="100"> <path d="M 50,50 m -50,0 a 50,50 0 1,0 100,0 a 50,50 0 1,0 -100,0" fill="none" stroke="black" stroke-width="10" stroke-dasharray="157 157" stroke-linecap="round" /> </svg> ``` 在这个示例中,我们使用了两个相同的圆弧路径来创建一个完整的圆环。首先,我们使用圆心为(50,50)、半径为50的圆弧路径来绘制圆环的上半部分。然后,我们再次使用相同的路径来绘制圆环的下半部分,但是需要将圆弧的方向改为逆时针方向。 在路径的d属性中,我们使用了小写字母a来绘制圆弧,同时将起点和终点坐标都设置为(50,50)。这里的圆弧半径也是50,所以路径的长度应该是圆的周长,因此我们需要使用两个圆弧路径来绘制完整的圆环。 接下来,我们使用stroke-dasharray属性来定义虚线样式。这里我们将其设置为"157 157",表示第一个线段占总路径长度的50%,第二个线段占总路径长度的另外50%。由于圆弧的周长是π×半径×2,所以这里的总路径长度为157(即π×50×2)。 最后,我们使用stroke-linecap属性来定义线段的端点样式,这里我们将其设置为"round",表示使用圆形端点样式。 上述代码将创建一个50%的圆环进度条,其中圆环的线宽为10px,线段长度为157px,使用圆形端点样式。你可以根据自己的需要来调整这些属性,创建不同样式的圆环进度条

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值