svg生成環形進度條

以前在項目中遇到一個環形進度條的需求,要求能實時更新進度,腦海中瞬間便蹦出css,svg,canvas3中方案,對於3種方案我的更偏向於svg,用法簡單,代碼量也不多,同時也便於實時控制。具體效果以下圖:css

圖片描述
代碼很是簡單:canvas

<svg width="150px" height="150px" class="svg">
    <circle r="70" cy="75" cx="75" stroke-width="8" stroke="#EAEFF4" stroke-linejoin="round" stroke-linecap="round" fill="none"/>
    <circle class="progress" r="70" cy="75" cx="75" stroke-width="8" stroke="#1593FF" stroke-linejoin="round" stroke-linecap="round" fill="none" stroke-dashoffset="0px"  stroke-dasharray="471px" />
</svg>

爲了便於演示,咱們先用css動畫控制:svg

svg {
    transform: rotate(-90deg);
}
.progress {
    animation: rotate 1500ms linear both;
}
@keyframes rotate {
    from {
        stroke-dashoffset: 471px;
    }
    to {
        stroke-dashoffset: 0px;
    }
}

實現原理

實現原理很是簡單,就是應用svg的stroke-dashoffset和stroke-dasharray屬性。
  • stroke-dasharray

官方解釋爲可控制用來描邊的點劃線的圖案範式,即定義虛線每段長度即虛線間間隔,數與數之間用逗號或者空白隔開,指定短劃線和缺口的長度。若是提供了奇數個值,則這個值的數列重複一次,從而變成偶數個值。動畫

  • stroke-dashoffset

標識的是整個路徑的偏移值。spa

經過控制虛線的間隔與偏移值,即可以行程各類各樣的線條動畫,固然咱們還能夠經過js控制,以下:code

let path = document.querySelector('#path');
// 可獲取路徑的長度
let len = path.getTotalLength();
path.style.cssText = `stroke-dasharray:"${number}"`;
相關文章
相關標籤/搜索