Vue Transition 組件詳解:讓元素動起來

文章目錄

  • 一、為什么需要 Transition 組件?
  • 二、核心工作原理
  • 三、基礎用法:6個過渡類名
  • 四、進階用法
  • 五、 JavaScript 鉤子函數
  • 六、過渡模式(Mode)
  • 七、列表過渡(TransitionGroup)
  • 八、與第三方動畫庫結合(如 Animate.css)
  • 九、最佳實踐與性能優化
  • 十、Vue3 與 Vue2 的 Transition 組件核心差異
  • 十一、常見問題解決方案

一、為什么需要 Transition 組件?

當元素在 DOM 中插入、更新、移除時, Transition 組件可以:

  1. 實現平滑的 CSS 動畫/過渡效果
  2. 自動管理過渡類名的添加與移除
  3. 提供 JavaScript 鉤子實現復雜動畫
  4. 提升用戶體驗的流暢感

二、核心工作原理

<transition name='fade'><div v-if='show'>內容</div>
</transition>

流程:

  1. 元素插入時自動添加 v-enter-from -> v-enter-to 類名
  2. 元素移除時自動添加 v-leave-from -> v-leave-to 類名
  3. 根據 CSS 過渡或動畫時長自動處理 DOM 操作

三、基礎用法:6個過渡類名

假設 <transition name="fade">

類名作用階段
.fade-enter-from進入動畫起始狀態
.fade-enter-active進入動畫生效時的樣式(定義過渡時長/效果)
.fade-enter-to進入動畫結束狀態
.fade-leave-from離開動畫起始狀態
.fade-leave-active離開動畫生效時的樣式
.fade-leave-to離開動畫結束狀態

示例1:淡出淡入

<template><button @click="show = !show">切換</button><transition name="fade"><div v-if="show" class="box">Hello</div></transition>
</template><style>
.fade-enter-from, .fade-leave-to {opacity: 0;
}
.fade-enter-active, .fade-leave-active {transition: opacity 0.5s;
}
</style>

四、進階用法

1. 使用 CSS 動畫(非過渡)

.fade-enter-active {animation: bounce-in 0.5s;
}
.fade-leave-active {animation: bounce-in 0.5s reverse;
}
@keyframes bounce-in {0% { transform: scale(0); }50% { transform: scale(1.25); }100% { transform: scale(1); }
}

2.自定義過渡時間

<transition :duration="1000">...</transition>  // 統一時長
<transition :duration="{ enter: 500, leave: 800 }">...</transition>  // 分別設置

初始渲染過渡

<transition appear></transition> // 首次加載時觸發過渡

五、 JavaScript 鉤子函數

實現更復雜的動畫邏輯(如結合GSAP)

<transition@before-enter="beforeEnter"@enter="enter"@after-enter="afterEnter"@enter-cancelled="enterCancelled"@before-leave="beforeLeave"@leave="leave"@after-leave="afterLeave”@leave-cancelled="leaveCancelled"
>
</transition><script setup>
// 進入動畫
const beforeEnter = (el) => {el.style.opacity = 0;
}const enter = (el, done) => {gsap.to(el, {opacity: 1,duration: 1,onComplete: done // 必須調用 done 來結束過渡})
}
</script>

六、過渡模式(Mode)

解決進入和離開同時發生的沖突

<transition mode="out-in">  //先完成離開動畫,再執行進入動畫<component :is="view"></component>
</transition>

七、列表過渡(TransitionGroup)

處理 v-for 列表的動畫:

<transition-group name="list" tag="ul"><li v-for="item in items" :key="item.id">{{ item.text }}</li>
</transition-group><style>
.list-move {   // 處理列表排序變化的過程transition: transform 0.8s ease;
}
</style>

八、與第三方動畫庫結合(如 Animate.css)

<transitionenter-active-class="animate__animated animate__data"leave-active-class="animate__animated animate__bounceOut"
><div v-if="show">內容</div>
</transition>

九、最佳實踐與性能優化

  1. 優化使用 CSS 過渡:瀏覽器可優化,性能更好
  2. 避免過渡太多屬性:優先使用 transform 和 opacity (可硬件加速)
  3. 設置 :css="false" :當完全使用 JS 動畫時,跳過 CSS 類名檢測
  4. 合理使用 key:幫助 Vue 正確識別元素
  5. 列表過渡添加 v-move 類:優化排序動畫

十、Vue3 與 Vue2 的 Transition 組件核心差異

1.類名命名的變化
Vue3 將 v-enterv-leave 重命名為 v-enter-fromv-leave-from ,使類名語義更清晰(明確表示起始狀態)。

2.根元素處理方式的差異

Vue2 的限制:

  • <transition> 組件內必須只有一個根元素
  • 多元素過渡需用<transition-group>

Vue3 的改進:

  • 支持多個根元素,但需要為每個元素添加 key
<!-- Vue3 合法寫法 -->
<transition><div v-if="show" key="a">內容A</div><div v-else key="b">內容B</div>
</transition>

3.新增特性:

  • transition 支持作為普通屬性傳遞
    Vue3 允許直接在組件上使用 transition 屬性:
<router-view v-solt="{ Component }"><component:is="Component":transition="{ name:'fade', mode:'out-in' }"/>
</router-view>
  • 更智能的過渡持續時間檢測
    Vue3 會自動檢測 CSS 動畫/過渡的實際持續時間,減少手動設置 :duration的需求
  • appear屬性的改進
    Vue3 的 appear 支持配置對象
<transitionappear:appear-class="custom-appear-class":appear-active-class="custom-appear-active-class"
>

十一、常見問題解決方案

Q1:過渡效果不生效

  • 檢查元素是否應用 v-if / v-show
  • 確認 CSS 類名拼寫正確
  • 確保過渡屬性在 -active 類中

Q2:列表動畫錯位

  • <transition-group> 添加 tag 屬性(如tag="div"
  • 檢查元素是否設置正確的 key

Q3:動畫卡頓

  • 使用 will-change: transform 開啟硬件加速
  • 簡化復雜動畫

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/78554.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78554.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/78554.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Redis】有序集合類型Sortedset 常用命令詳解

此類型和 set 一樣也是 string 類型元素的集合&#xff0c;且不允許重復的元素 不同的是每個元素都會關聯一個double類型的分數&#xff0c;redis正是通過分數來為集合中的成員進行從小到大的排序 有序集合的成員是唯一&#xff0c;但分數(score)卻可以重復 1. zadd - 添加 語法…

微信小程序 van-dropdown-menu

點擊其他按鈕&#xff0c;關閉van-dropdown-menu下拉框 DropdownMenu 引入頁面使用index.wxmlindex.scssindex.ts(重點)index.ts(全部) DropdownMenu 引入 在app.json或index.json中引入組件 "usingComponents": {"van-dropdown-menu": "vant/weapp…

C 語言內存分配方法及優缺點

在 C 語言開發中&#xff0c;內存分配的方式主要有三種&#xff1a;靜態內存分配、棧內存分配和堆內存分配。每種分配方式都有其獨特的特點、適用場景以及優缺點。 靜態內存分配 靜態內存分配是在編譯時就確定好內存的分配&#xff0c;它主要用于定義全局變量和靜態局部變量。…

第二大腦-個人知識庫

原文鏈接:https://i68.ltd/notes/posts/20250407-llm-person-kb/ Quivr-第二大腦一樣的個人助手&#xff0c;利用AI技術增強個人生產力 將 GenAI 集成到您的應用程序中的個性化 RAG,專注于您的產品而非 RAG項目倉庫:https://github.com/QuivrHQ/quivr Star:37.7k官網:https:/…

A. Ambitious Kid

time limit per test 1 second memory limit per test 256 megabytes Chaneka, Pak Chaneks child, is an ambitious kid, so Pak Chanek gives her the following problem to test her ambition. Given an array of integers [A1,A2,A3,…,AN][A1,A2,A3,…,AN]. In one o…

SQL進階知識:八、性能調優

今天介紹下關于性能調優的詳細介紹&#xff0c;并結合MySQL數據庫提供實際例子。 性能調優是數據庫管理中的一個重要環節&#xff0c;尤其是在處理高并發和大數據量的應用場景時。MySQL提供了多種工具和方法來優化數據庫性能。以下是關于MySQL性能調優的詳細介紹&#xff0c;以…

NVLink、UALink 崛起,PCIe Gen6 如何用 PAM4 迎戰未來?

現在數字經濟發展地相當快速&#xff0c;像Cloud、現在火紅的AI、大數據這些新技術都需要在數據中心里運行更多運算&#xff0c;伴隨而來的是更快的數據傳輸速度的需求。 在數據中心&#xff0c;有很多條數據傳輸路徑&#xff0c;舉例 &#xff1a; Server 和Storage之間&…

Jenkins流水線管理工具

文章目錄 前言&#xff1a; DevOps時代的自動化核心 —Jenkins一、Jenkins是什么&#xff1f;二、Linux安裝Jenkinswar包方式安裝依賴環境下載 Jenkins WAR 包啟動 Jenkins 服務啟動日志驗證配置插件鏡像源 docker鏡像方式安裝依賴環境拉取 Jenkins 鏡像運行 Jenkins 容器獲取初…

Spring @Transactional 自調用問題深度解析

Spring Transactional 自調用問題深度解析 問題本質&#xff1a;自調用事務失效 當類內部的方法A調用同一個類的另一個帶有Transactional注解的方法B時&#xff0c;事務注解不會生效。這是因為Spring的事務管理是基于AOP代理實現的&#xff0c;而自調用會繞過代理機制。 原理…

【爬蟲工具】2025微博采集軟件,根據搜索關鍵詞批量爬帖子,突破50頁限制!

文章目錄 一、背景分析1.1 開發背景1.2 軟件界面1.3 結果展示1.4 軟件說明 二、主要技術2.1 模塊分工2.2 部分代碼 三、使用介紹3.0 填寫cookie3.1 軟件登錄3.2 采集wb帖子 四、演示視頻五、軟件首發 本工具僅限學術交流使用&#xff0c;嚴格遵循相關法律法規&#xff0c;符合平…

java函數式接口與方法引用

函數式接口指的是&#xff0c;一個interface&#xff0c; 只含有一個抽象方法。函數式接口可以加上FunctionalInterface注解&#xff0c;加上這個注解后編譯器會檢查接口是否滿足函數式接口的規范&#xff0c;不滿足規范則直接編譯不過。 典型的內置函數式接口有Runnable?、…

uniapp開發04-scroll-view組件的簡單案例

uniapp開發04-scroll-view組件的簡單案例&#xff01;廢話不多說&#xff0c;我們直接上代碼分析。 <!--演示scroll-view組件效果--><scroll-view class"scroll" scroll-x><view class"group"><view class"item">111&l…

硬件須知的基本問題1

目錄 1. 電路表示中的電壓源表示符號有哪些&#xff1f; 2&#xff0e;查找電路表示中的電流源表示符號有哪些&#xff1f; 3&#xff0e;上拉電阻和下拉電阻的作用是什么&#xff1f; 4&#xff0e;0 歐姆電阻在電路中有什么作用&#xff1f; 5&#xff0e;電容的耦合…

Vue回調函數中的this

2025/4/25 向 示例 一個例子——計數器&#xff0c;通過this來操作數據。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.…

一鍵快速轉換音頻視頻格式的實用工具

軟件介紹 Sundy音視頻格式轉換工具&#xff0c;支持一鍵轉換音頻和視頻格式&#xff0c;還可以集成至右鍵菜單&#xff0c;讓操作更加便捷。軟件支持MP4、FLV、AVI、MKV、MP3、FLAC等多種格式轉換&#xff0c;用戶可以根據需求自由選擇。 直白版 Sundy音視頻格式轉換工…

【AI論文】Tina:通過LoRA的微小推理模型

摘要&#xff1a;如何在語言模型中實現成本效益高的強大推理能力&#xff1f; 在這個基本問題的驅動下&#xff0c;我們提出了Tina&#xff0c;這是一個以高成本效益實現的小型推理模型家族。 值得注意的是&#xff0c;Tina 證明了僅使用最少的資源就可以開發出大量的推理性能&…

TC3xx學習筆記-UCB BMHD使用詳解(一)

文章目錄 前言UCB BMHDPINDISHWCFGLSENA0-3LBISTENACHSWENABMHDIDSTADCRCBMHDCRCBMHD_NPW0-7 總結 前言 AURIX Tc系列Mcu啟動過程&#xff0c;必須要了解BMHD&#xff0c;本文詳細介紹BMHD的定義及使用過程 UCB BMHD UCB表示User Configuration Block,UCB是Dflash,存儲的地址…

H.264/AVC標準主流開源編解碼器編譯說明

An artisan must first sharpen his tools if he is to do his work well. 工欲善其事,必先利其器. 前言 想研究和學習H.264/AVC視頻編解碼標準的入門的伙伴們,不論是學術研究還是工程應用都離不開對源碼的分析,因此首要工作是對各類編解碼器進行編譯,本文針對主流的一些符…

Adobe Photoshop(PS)2022 版安裝與下載教程

Adobe Photoshop下載安裝和使用教程 Adobe Photoshop&#xff0c;簡稱“PS”&#xff0c;是由Adobe Systems開發和發行的圖像處理軟件。Photoshop主要處理以像素所構成的數字圖像。使用其眾多的編修與繪圖工具&#xff0c;可以有效地進行圖片編輯和創造工作&#xff0c…

面試新收獲-大模型學習

大模型原理 Transformer 架構與自注意力機制 Transformer 是當前大多數大模型采用的核心架構&#xff0c;由編碼器-解碼器組成&#xff0c;摒棄了傳統 RNN 的順序處理方式。Transformer 中關鍵在于多頭自注意力機制&#xff08;Multi-Head Self-Attention&#xff09;&#xf…