EP41 - 過渡群組

更新於 2024/10/18閱讀時間約 5 分鐘
TransitionGroup也是在實用範例有用過,
希望內容不要在這麼多了www
太多內容真的讀過也沒太多感覺 哈

<TransitionGroup> 是一個內建的組件,旨在對渲染在列表中的元素或組件的插入、移除和順序變更進行動畫處理。

<Transition> 的差異 - Differences from <Transition>​

<TransitionGroup> 支持與 <Transition> 相同的屬性、CSS 轉場類別和 JavaScript 鉤子監聽器,但有以下差異:

  1. 預設情況下,它不會渲染包裹元素。不過,你可以使用 tag 屬性指定要渲染的元素。
  2. 轉場模式不可用,因為我們不再在互斥的元素之間進行切換。
  3. 內部的元素必須始終具有唯一的 key 屬性。
  4. CSS 轉場類別將應用於列表中的各個元素,而不是應用於組 / 容器本身。

提示:

DOM 模板中使用時,應以 <transition-group> 的形式引用。

進入 / 離開轉場 - Enter / Leave Transitions​

以下是使用 <TransitionGroup>v-for 列表應用進入 / 離開轉場的範例:

模板

<TransitionGroup name="list" tag="ul">
<li v-for="item in items" :key="item">
{{ item }}
</li>
</TransitionGroup>

CSS

.list-enter-active,
.list-leave-active {
transition: all 0.5s ease;
}
.list-enter-from,
.list-leave-to {
opacity: 0;
transform: translateX(30px);
}

移動轉場 - Move Transitions​

上述範例存在一些明顯的缺陷:當插入或移除項目時,其周圍的項目會立即「跳」到位置,而不是平滑地移動。我們可以通過添加一些額外的 CSS 規則來修正這個問題:

CSS

.list-move, /* 對移動的元素應用轉場 */
.list-enter-active,
.list-leave-active {
transition: all 0.5s ease;
}

.list-enter-from,
.list-leave-to {
opacity: 0;
transform: translateX(30px);
}

/* 確保離開的項目脫離佈局流,以便可以正確計算移動動畫。 */
.list-leave-active {
position: absolute;
}

現在效果好多了——當整個列表被打亂時,甚至可以平滑地動畫過渡。

Full example

錯開列表轉場 - Staggering List Transitions​

透過數據屬性與 JavaScript 轉場進行通信,我們還可以在列表中實現錯開的轉場。首先,我們將項目的索引渲染為 DOM 元素上的數據屬性:

模板

<TransitionGroup
tag="ul"
:css="false"
@before-enter="onBeforeEnter"
@enter="onEnter"
@leave="onLeave"
>
<li
v-for="(item, index) in computedList"
:key="item.msg"
:data-index="index"
>
{{ item.msg }}
</li>
</TransitionGroup>

然後,在 JavaScript 鉤子中,我們根據數據屬性為元素添加延遲動畫。此範例使用 GSAP 庫來執行動畫:

JavaScript

function onEnter(el, done) {
gsap.to(el, {
opacity: 1,
height: '1.6em',
delay: el.dataset.index * 0.15,
onComplete: done
})
}

Full Example in the playground

相關文件<TransitionGroup> API reference

意外地沒有這麼多內容!耶~
同時管理大量元素的動畫效果,
使用簡化結構跟一致的過渡效果還是蠻實用的 www
avatar-img
2會員
71內容數
分享生活趣事~
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
卡關的人生 的其他內容
<Transition> 用於元素或組件進入和離開 DOM 時的動畫,而 <TransitionGroup> 則應用於 v-for 列表的插入、移除或移動。這些組件透過 CSS 類別來控制動畫,例如進入/離開的狀態類別。可以透過 name 屬性自訂過渡效果的命名。
Vue 插件是自包含的代碼,通過 app.use() 方法安裝,用於擴展應用功能。插件可定義為包含 install() 方法的物件,或簡單的函數。插件用途包括註冊全局組件、自定義指令、資源注入和添加全局屬性。
Vue 自定義指令用於擴充功能,需要直接操作 DOM 時使用。常見例子如 v-focus 指令,使元素在插入 DOM 時自動獲得焦點。指令定義物件可提供多個生命週期鉤子函數,例如 mounted、updated 等。指令可以簡寫為函數,當行為在 mounted 和 updated 時相同時特別方便。
在學習 Vue 的可重用性(Reusability)時,Composables 是重要概念,專指可以重複使用的函式。這些函式利用 Vue 的 Composition API 封裝和重用有狀態的邏輯,幫助開發者在應用程式中進行常見任務的邏輯重用,例如格式化日期或追蹤鼠標位置。
Vue 的 scoped 樣式無法完全隔離全局樣式,需要採取其他策略如 BEM 命名規則或 CSS Modules 來避免衝突。未來可能也會遇到 JavaScript 衝突,因此需遵循嚴格的命名和範圍控制。
這段代碼展示了如何使用 Vue 的 <TransitionGroup> 組件來實現帶過渡效果的列表,這是一個實用的例子,對於學習前端動畫效果非常有幫助。
<Transition> 用於元素或組件進入和離開 DOM 時的動畫,而 <TransitionGroup> 則應用於 v-for 列表的插入、移除或移動。這些組件透過 CSS 類別來控制動畫,例如進入/離開的狀態類別。可以透過 name 屬性自訂過渡效果的命名。
Vue 插件是自包含的代碼,通過 app.use() 方法安裝,用於擴展應用功能。插件可定義為包含 install() 方法的物件,或簡單的函數。插件用途包括註冊全局組件、自定義指令、資源注入和添加全局屬性。
Vue 自定義指令用於擴充功能,需要直接操作 DOM 時使用。常見例子如 v-focus 指令,使元素在插入 DOM 時自動獲得焦點。指令定義物件可提供多個生命週期鉤子函數,例如 mounted、updated 等。指令可以簡寫為函數,當行為在 mounted 和 updated 時相同時特別方便。
在學習 Vue 的可重用性(Reusability)時,Composables 是重要概念,專指可以重複使用的函式。這些函式利用 Vue 的 Composition API 封裝和重用有狀態的邏輯,幫助開發者在應用程式中進行常見任務的邏輯重用,例如格式化日期或追蹤鼠標位置。
Vue 的 scoped 樣式無法完全隔離全局樣式,需要採取其他策略如 BEM 命名規則或 CSS Modules 來避免衝突。未來可能也會遇到 JavaScript 衝突,因此需遵循嚴格的命名和範圍控制。
這段代碼展示了如何使用 Vue 的 <TransitionGroup> 組件來實現帶過渡效果的列表,這是一個實用的例子,對於學習前端動畫效果非常有幫助。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
分支與合併 Branching and Merging[1] 。 這裡提供一個很有趣的說法, 就是理解「分支 Branching」最好的方式, 就是把它理解成「上下文 Context」。
Thumbnail
在 TypeScript 中,套件是模組化代碼的集合,可以提高代碼的可重用性和可維護性。常見的套件包括各種庫和框架,如 lodash、express 等。以下是有關引用套件、自定義套件和常見套件的詳細介紹。
「嵌入 Embedding」這個概念, 是指將「資料 Data」轉換為「向量 Vector」格式的過程。 資料可以是影片的樣本, 可以是音訊的樣本, 可以是圖片的樣本, 可以是文字的樣本。 不同類型的樣本, 可以透過相對應的預訓練神經網路模型, 將資料
Thumbnail
本章節提供了關於Typescript中流程控制元素的詳細介紹,包括if, else if, else語句,三元運算子,switch語句,各種for迴圈,while迴圈,循環嵌套和控制迴圈語句(break,continue和標籤)的使用。
Thumbnail
本章節旨在介紹 TypeScript 的基本資料型別,包括內建型別、型別轉換、自訂型別、元組、集合、陣列、和字典型別。透過理解和使用這些型別,可以提高代碼的可讀性和可維護性。
Thumbnail
本章節旨在介紹TypeScript的基本語法,包括一般結構、程式進入點、註解以及變數的定義和賦值。這些知識將幫助讀者瞭解TypeScript的基本架構,並且可以開始使用TypeScript進行開發。
Thumbnail
我們在實作中,難免會遇到在不同組件中,卻有需求相同的資料格式,因此 mixins 可以達到我們的需求,除了 data 以外也包含了 methods 可以共用,舉例來說,學生資料可能會在,班級跟社團內被使用,當我們要撰寫元件時,就可以省略多餘的 data 定義。
Thumbnail
建構Anytype之前..... 1.清晰劃分工作區 2.選擇模板套用 3.改變外觀界面
上一篇文章提到有些介面不應被繼承,但物件導向的子類別只能繼承父類別的介面,因而產生一些不合適的介面實作。trait/typeclass則沒有這種繼承機制,這似乎使需要繼承的特性無法直接使用。然而函數式導向比起繼承,更適合使用組合,根本不需要使用繼承疊加特性。 資料類型的定義往往跟怎麼建構模型相
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
分支與合併 Branching and Merging[1] 。 這裡提供一個很有趣的說法, 就是理解「分支 Branching」最好的方式, 就是把它理解成「上下文 Context」。
Thumbnail
在 TypeScript 中,套件是模組化代碼的集合,可以提高代碼的可重用性和可維護性。常見的套件包括各種庫和框架,如 lodash、express 等。以下是有關引用套件、自定義套件和常見套件的詳細介紹。
「嵌入 Embedding」這個概念, 是指將「資料 Data」轉換為「向量 Vector」格式的過程。 資料可以是影片的樣本, 可以是音訊的樣本, 可以是圖片的樣本, 可以是文字的樣本。 不同類型的樣本, 可以透過相對應的預訓練神經網路模型, 將資料
Thumbnail
本章節提供了關於Typescript中流程控制元素的詳細介紹,包括if, else if, else語句,三元運算子,switch語句,各種for迴圈,while迴圈,循環嵌套和控制迴圈語句(break,continue和標籤)的使用。
Thumbnail
本章節旨在介紹 TypeScript 的基本資料型別,包括內建型別、型別轉換、自訂型別、元組、集合、陣列、和字典型別。透過理解和使用這些型別,可以提高代碼的可讀性和可維護性。
Thumbnail
本章節旨在介紹TypeScript的基本語法,包括一般結構、程式進入點、註解以及變數的定義和賦值。這些知識將幫助讀者瞭解TypeScript的基本架構,並且可以開始使用TypeScript進行開發。
Thumbnail
我們在實作中,難免會遇到在不同組件中,卻有需求相同的資料格式,因此 mixins 可以達到我們的需求,除了 data 以外也包含了 methods 可以共用,舉例來說,學生資料可能會在,班級跟社團內被使用,當我們要撰寫元件時,就可以省略多餘的 data 定義。
Thumbnail
建構Anytype之前..... 1.清晰劃分工作區 2.選擇模板套用 3.改變外觀界面
上一篇文章提到有些介面不應被繼承,但物件導向的子類別只能繼承父類別的介面,因而產生一些不合適的介面實作。trait/typeclass則沒有這種繼承機制,這似乎使需要繼承的特性無法直接使用。然而函數式導向比起繼承,更適合使用組合,根本不需要使用繼承疊加特性。 資料類型的定義往往跟怎麼建構模型相