在前端開發中,過渡(Transition)和動畫(Animation)都是用來實現頁面元素的動態效果,但它們之間有一些關鍵的區別:
1. 觸發方式:
- 過渡(Transition): 由狀態的變化觸發。例如,當一個元素的
hover
、focus
、active
狀態改變,或者透過JavaScript動態新增/移除CSS類名時,就會觸發過渡效果。 過渡更關注狀態之間的變化過程。 - 動畫(Animation): 由動畫定義觸發。動畫透過
@keyframes
規則定義關鍵幀,然後透過animation
屬性應用到元素上。動畫的執行不依賴於元素的狀態,而是按照預先定義的時間線進行播放。
2. 控制方式:
- 過渡(Transition): 控制的是狀態變化過程中的屬性值。開發者主要控制
transition-property
(哪些屬性變化)、transition-duration
(過渡時間)、transition-timing-function
(過渡速度曲線) 和transition-delay
(延遲時間)。 過渡無法精確控制中間狀態,只能定義起始和結束狀態。 - 動畫(Animation): 控制的是一段時間內元素的屬性值變化。開發者可以定義多個關鍵幀(
@keyframes
),精確控制動畫的每個階段,以及每個階段的屬性值、時間點和速度曲線。 動畫提供了更精細的控制,可以實現更復雜的動畫效果。
3. 可迴圈性:
- 過渡(Transition): 通常只執行一次,即從一個狀態過渡到另一個狀態。雖然可以透過JavaScript模擬迴圈效果,但本質上並非迴圈。
- 動畫(Animation): 可以透過
animation-iteration-count
屬性設定動畫的迴圈次數,可以無限迴圈播放。
4. 適用場景:
- 過渡(Transition): 適用於簡單的狀態變化效果,例如:滑鼠懸停時的顏色變化、元素獲得焦點時的邊框變化、選單的展開和收起等。 這些場景通常只需要簡單的起始和結束狀態之間的平滑過渡。
- 動畫(Animation): 適用於複雜的動畫效果,例如:載入動畫、輪播圖、角色動畫、頁面元素的入場和出場動畫等。 這些場景需要對動畫過程進行更精細的控制。
總結:
特性 | 過渡 (Transition) | 動畫 (Animation) |
---|---|---|
觸發方式 | 狀態變化 | 動畫定義 (@keyframes ) |
控制方式 | 起始和結束狀態 | 多個關鍵幀,精確控制 |
可迴圈性 | 通常只執行一次 | 可以迴圈播放 |
適用場景 | 簡單的狀態變化效果 | 複雜的動畫效果 |
總而言之,過渡適用於簡單的狀態切換效果,而動畫適用於更復雜、更精細的動畫場景。 選擇哪種方式取決於具體的專案需求。