使用SVG实现圆环loading进度效果

效果

这里写图片描述

当我们想实现这样一个loading效果,有这么几种选择,第一种是使用canvas,第二种是借助css3的transform属性。这两种方法有一个问题,在webkit内核的浏览器上存在毛边。那么如果只兼容IE9+的浏览器,可以考虑使用SVG

具体代码

SVG的实现效果非常简单

   <svg width="440" height="440" VIEWBOX="0 0 440 440">
        <circle cx="220" cy="220" r="170" stroke-width="50" stroke="#D1D3D7" fill="none"></circle>
        <circle cx="220" cy="220" r="170" stroke-width="50" stroke="#00A5E0" fill="none" transform="matrix(0,-1,1,0,0,440)" stroke-dasharray="0 1069"></circle>
    </svg>

实现这个效果的关键因素在于stroke-dasharray="0 1069" 第一个参数代表蓝色进度条的长度,第二个参数代表灰色背景的长度。这里两个参数的和必须是1069,也就是圆的周长

这里写图片描述

如果我们想拖动下面的进度条自动更新进度,只需要通过js改变这个属性值就可以。js代码如下所示

   if(window.addEvenetListener){
      var range = document.getElementById('range');
      if(!range) return;
      //获得第二个圆的引用
      var circle = range.getElementsByTagName('circle')[1];
      range.addEvenetListener('change', function(){
          var percent = this.value / 100;
          //圆的周长
          var perimeter = Math.PI * 2 * 170;
          //stroke-dasharray属性的两个参数和必须为周长
          circle.setAttribute('stroke-dasharray', perimeter * percent + ' ' + perimeter. * (1 - percent));
      })
   }

css代码如下所示

    circle {
        -webkit-transition: stroke-dasharray .25s;
        transition: stroke-dasharray .25s;
    }

stroke-dasharray在SVG中描边是代表虚线,第一个参数是虚线的宽度,第二个参数是虚线之间的间距。默认stroke-dasharray的起始位置在右侧,而不是上方,因此,我们需要使用transform逆时针旋转90°, 这就是第二个circle元素上面transform=”matrix(0,-1,1,0,0,440)”的由来。(iOS 手机上,transform逆时针旋转90°只会改变图形外观,但是其坐标起始位置还是右侧。因此,更改起始坐标可能还需要通过外部容器旋转控制。)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值