js怎樣實現環形進度條 SVG實現圓形進度動畫

如何用JS結合svg實現環形進度條?1.使用svg的作為底色,繪制進度圓弧;2.通過stroke-dasharray和stroke-dashoffset控制進度顯示,前者定義虛線樣式,后者控制偏移量;3.用js計算周長并根據百分比動態設置stroke-dashoffset實現動畫;4.添加transform使進度從頂部開始。美化方面可使用顏色漸變、陰影效果、動畫緩動及中心文字展示。兼容性處理包括polyfill支持、css前綴添加及降級方案。性能優化應減少dom操作、使用硬件加速、簡化svg結構,移動設備可考慮canvas替代svg。

js怎樣實現環形進度條 SVG實現圓形進度動畫

環形進度條,用JS結合SVG,能做出很酷炫的效果。核心在于動態改變SVG圓弧的stroke-dasharray和stroke-dashoffset屬性。

js怎樣實現環形進度條 SVG實現圓形進度動畫

SVG實現圓形進度動畫

js怎樣實現環形進度條 SVG實現圓形進度動畫

首先,我們需要一個SVG元素,里面包含一個圓形元素。這個圓形將作為我們的進度條底色。然后再疊加一個元素,利用SVG的路徑d屬性來繪制一個圓弧,這個圓弧就是我們的進度條。

js怎樣實現環形進度條 SVG實現圓形進度動畫

<svg width="200"    style="max-width:90%">   <circle cx="100" cy="100" r="90" fill="none" stroke="#eee" stroke-width="10" />   <path id="progress-bar" cx="100" cy="100" r="90" fill="none" stroke="#007bff" stroke-width="10" stroke-dasharray="565.48" stroke-dashoffset="565.48" transform="rotate(-90 100 100)"/> </svg>

這里stroke-dasharray和stroke-dashoffset是關鍵。stroke-dasharray定義了描邊是虛線,虛線段的長度和間距。stroke-dashoffset定義了虛線起始位置的偏移量。當stroke-dashoffset等于stroke-dasharray時,圓弧就完全不可見。

接著,用JS來控制stroke-dashoffset的值,從而實現動畫效果。

const progressBar = document.getElementById('progress-bar'); const radius = 90; // 圓的半徑 const circumference = 2 * Math.PI * radius; // 圓的周長  function setProgress(percent) {   const offset = circumference - percent / 100 * circumference;   progressBar.style.strokeDashoffset = offset; }  // 示例:設置進度為60% setProgress(60);  // 可以使用setInterval或者requestAnimationFrame來實現動畫 let progress = 0; setInterval(() => {   progress = (progress + 1) % 101; // 0-100循環   setProgress(progress); }, 50);

這段代碼計算了圓的周長,然后根據進度百分比計算出stroke-dashoffset的值,并將其應用到元素上。使用setInterval模擬進度增長,實現動畫效果。注意,transform=”rotate(-90 100 100)”是為了讓進度條從頂部開始。

如何讓環形進度條更美觀?

可以考慮添加一些細節,比如:

  • 顏色漸變: 使用SVG的或者css的linear-gradient來給進度條添加顏色漸變。
  • 陰影效果: 使用CSS的box-shadow或者SVG的來給進度條添加陰影效果。
  • 動畫緩動: 使用CSS的transition或者JS的requestAnimationFrame結合緩動函數來實現更平滑的動畫效果。
  • 添加文字: 在進度條中心添加文字,顯示當前的進度百分比或者其他信息。

例如,添加一個簡單的顏色漸變:

<svg width="200" height="200">   <defs>     <linearGradient id="gradient" x1="0%" y1="0%" x2="100%" y2="0%">       <stop offset="0%" stop-color="#007bff" />       <stop offset="100%" stop-color="#28a745" />     </linearGradient>   </defs>   <circle cx="100" cy="100" r="90" fill="none" stroke="#eee" stroke-width="10" />   <path id="progress-bar" cx="100" cy="100" r="90" fill="none" stroke="url(#gradient)" stroke-width="10" stroke-dasharray="565.48" stroke-dashoffset="565.48" transform="rotate(-90 100 100)"/> </svg>

如何處理不同瀏覽器的兼容性問題?

SVG本身具有良好的瀏覽器兼容性。但是,一些舊版本的瀏覽器可能不支持某些SVG特性或者css屬性。為了確保環形進度條在各種瀏覽器中都能正常顯示,可以采取以下措施:

  • 使用polyfill: 對于不支持的SVG特性,可以使用polyfill來提供兼容性支持。
  • 使用CSS前綴: 對于一些CSS屬性,可能需要添加瀏覽器特定的前綴,例如-webkit-、-moz-等。
  • 降級方案: 如果某些瀏覽器實在無法支持環形進度條,可以提供一個簡單的降級方案,例如顯示一個靜態的進度條或者一個簡單的百分比文本。

例如,針對舊版本的ie瀏覽器,可以使用Conditional Comments來加載一個專門的CSS文件,提供降級方案。

環形進度條的性能優化有哪些技巧?

  • 減少DOM操作: 頻繁的DOM操作會影響性能。盡量減少DOM操作的次數,例如可以使用requestAnimationFrame來批量更新DOM元素。
  • 使用硬件加速: 某些CSS屬性可以觸發硬件加速,例如transform、opacity等??梢允褂眠@些屬性來提高動畫的性能。
  • 避免復雜的SVG結構: 復雜的SVG結構會增加渲染的負擔。盡量簡化SVG結構,避免使用過多的濾鏡和漸變效果。
  • 使用CSS Sprites: 如果環形進度條包含多個小圖標,可以使用CSS Sprites來減少http請求的次數。

此外,在移動設備上,性能優化尤為重要??梢钥紤]使用Canvas來實現環形進度條,Canvas的性能通常比SVG更好。

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享