iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0
自我挑戰組

你努力一下啦,自己做一個前端專案啦系列 第 8

<你努力一下啦,自己做一個前端專案啦!08>:實作可以廣泛使用的 Progress Bar

  • 分享至 

  • xImage
  •  

打造一個高泛用性的 ProgressBar

在遊戲裡,進度條是最常見的元素之一:血量、魔力、經驗、探索進度…到處都需要它。
與其在不同地方重複刻一條條死板的條件樣式,我更想要一個 通用、可擴展 的 component。

一個「好用」的進度條,需要哪些設計?

我想解決的問題

專案裡需要很多種進度條(血量條、經驗條、探索條…)。
如果每一條都硬寫 class,程式碼會到處複製,維護麻煩。
有些情境不是單純的數值條:

  • 未知進度(探索中,不知道什麼時候結束)
  • 緩衝進度(影音載入,顯示 buffer)
  • 分段進度(經驗升級,每一小格都是一個里程碑)

功能的取捨

先列出最想要的能力,然後一一判斷要不要做進去:

  • 必須要有:基本的 value/max → 百分比,這是核心。
  • 應該要有:variant(顏色樣式),因為遊戲情境裡血量≠魔力≠經驗。
  • 有就更好:buffer、segments、indeterminate。這些不是每次都會用,但能支援更多場景。
  • 可選的附加值:label、數值顯示、動畫控制。

樣式的思路

為了不讓元件綁死在單一設計上,所以採用了 組合式 class 設計:

  • 尺寸:size → xs/sm/md/lg/xl
  • 圓角:radius → none/sm/md/lg/full
  • 主題:variant → default/health/experience/mana/explore...

邊界處理

開發元件時,我們需要注意「壞數據」會怎麼表現:

  • value < 0 → 自動歸零。
  • value > max → clamp 到 100%。
  • max <= 0 → 當作 100,避免除以零。
  • indeterminate = true → 忽略數值,顯示動畫。

總結

建立這個 ProgressBar 的過程,其實就是在思考:

  • 哪些功能是必須的?(核心 value/max)
  • 哪些功能能擴展元件的生命力?(variant、segments、buffer、indeterminate)
  • 怎麼處理壞數據與邊界?(clamp、預設值)
  • 怎麼保持通用性與一致性?(class token 化、props 控制)

progress bar


上一篇
<你努力一下啦,自己做一個前端專案啦!07>:用個進度條看起來很專業
系列文
你努力一下啦,自己做一個前端專案啦8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言