React 通過svg實現進度環元件

2021-09-25 18:55:47 字數 2200 閱讀 5939

效果圖,如下圖所示進度分別為25%,50%,75%, 100%渲染圖形

實現思路:1. 外層div作為元件容器,class設定寬、高為100%以自適應元件外層容器寬高,實現根據外容器寬、高變化自動變化;

2.svg 通過兩個circle實現進度環,乙個circle作為背景,另外乙個繪製進度條;

定義viewbox指定畫布大小,方便後續計算,width='100', height='100%',自動填充佔滿父容器,以寬高較小者作為圓環的外直徑;

3. svg中定義底1個circle 作為進度環背景,cx、cy 設定為50,代表circle圓心在畫布中點,直徑 r = 50 /(1 + ratio), ratio為圓環stroke寬度和圓直徑大小比例,作為元件屬性由使用元件方傳遞,上邊完整**中預設值為0.1 ,從圓心到圓外側邊長度為circle直徑 + 繪製寬度,所以 r = 50 /(1 + ratio),所以圓環環形寬度為  strokewidth = r * ratio, stroke屬性設定背景色,strokeopacity設定 stroke 邊透明度, fill='none'表明繪製的圓形不需要填充內容;

4. 繪製進度條:定義第2個circle 用來繪製進度。

圓心,直徑、繪製寬度同第1個圓環,繪製顏色(stroke)引用 defs中定義的線性漸變元素實現繪製顏色漸變;

strokedasharray定義繪製線段的虛線段陣列,長度為圓的直徑,strokedashoffset設定繪製線段偏移量,通過修改其值來繪製進度條。strokedashoffset初始值為圓周長,線段偏移長度和園周長大小一致,所以一開始圓環線段偏移之後顯示為虛線部分,所以環2在預設情況下通過設定偏移長度在介面上是看不到的,然後通過percent來計算strokedashoffset值,再修改其值,本例實現是為了進度條動態展示,設定在300ms之後修改strokedashoffset值。

使用SVG實現圓環loading進度效果

當我們想實現這樣乙個loading效果,有這麼幾種選擇,第一種是使用canvas,第二種是借助css3的transform屬性。這兩種方法有乙個問題,在webkit核心的瀏覽器上存在毛邊。那麼如果只相容ie9 的瀏覽器,可以考慮使用svg svg的實現效果非常簡單 實現這個效果的關鍵因素在於stro...

SVG實現畫弧線進度條

畫一段到 x,y 的橢圓弧.橢圓弧的 x,y 軸半徑分別為 rx,ry.橢圓相對於 x 軸旋轉 x axis rotation 度.large arc 0表明弧線小於180讀,large arc 1表示弧線大於180度.sweep 0表明弧線逆時針旋轉,sweep 1表明弧線順時間旋轉.角度換算弧度...

svg 實現半環形進度條

path元素用來定義形狀的通用元素。下面的命令可用於路徑資料 注釋 以上所有命令均允許小寫字母。大寫表示絕對定位,小寫表示相對定位。例如 畫個圓環 解析 symbol元素用來定義乙個圖形模板物件,它可以用乙個元素例項化。symbol元素對圖形的作用是在同一文件中多次使用,新增結構和語義。結構豐富的文...