Vue3的內置組件 -實現過渡動畫 TransitionGroup

Vue3的內置組件 -實現過渡動畫 TransitionGroup

是一個內置組件,用于對 v-for 列表中的元素或組件的插入、移除和順序改變添加動畫效果

支持和 基本相同的 props、CSS 過渡 class 和 JavaScript 鉤子監聽器,但有以下幾點區別:

  • 默認情況下,它不會渲染一個容器元素。但你可以通過傳入 tag prop 來指定一個元素作為容器元素來渲染。

  • 過渡模式在這里不可用,因為我們不再是在互斥的元素之間進行切換。

  • 列表中的每個元素都必須有一個獨一無二的 key attribute。

  • CSS 過渡 class 會被應用在列表內的元素上,而不是容器元素上

基本用法
<template><button @click="addItem">增加item</button><button @click="removeItem">移除item</button><TransitionGroup name="list" tag="div"><div v-for="(item, index) in items" :key="item" :data-index="index">{{ item }}</div></TransitionGroup>
</template><script setup lang="ts">const items = ref(['Item 1', 'Item 2', 'Item 3']);const nextId = ref(4);const addItem = () => {items.value.push(`Item ${nextId.value++}`);};const removeItem = () => {items.value.pop();};
</script><style scoped>
.list-enter-active,
.list-leave-active {transition: all 0.5s;
}
.list-enter-from,
.list-leave-to {opacity: 0;transform: translateX(30px);
}
</style>
移動動畫

上面的示例有一些明顯的缺陷:當某一項被插入或移除時,它周圍的元素會立即發生“跳躍”而不是平穩地移動。我們可以通過添加一些額外的 CSS 規則來解決這個問題

<template><button @click="addItem">在任意位置添加一項</button><button @click="removeItem">移除任意位置上的一項</button><button @click="shuffleItems">排序位置</button><TransitionGroup name="list" tag="div"><div v-for="(item, index) in items" :key="item" :data-index="index">{{ item }}</div></TransitionGroup>
</template><script setup lang="ts">const items = ref(['Item 1', 'Item 2', 'Item 3']);const nextId = ref(4);const addItem = () => {items.value.push(`Item ${nextId.value++}`);};const removeItem = () => {items.value.pop();};const shuffleItems = () => {items.value = items.value.sort(() => Math.random() - 0.5);};
</script><style scoped>
.list-group {display: flex;flex-direction: column;gap: 10px;
}.list-item {padding: 10px;background-color: #f0f0f0;border-radius: 4px;
}
.list-enter-active,
.list-leave-active,
.list-move { /* 對移動中的元素應用的過渡 */transition: all 0.5s;
}
.list-enter-from,
.list-leave-to {opacity: 0;transform: translateX(30px);
}
/* 確保將離開的元素從布局流中刪除以便能夠正確地計算移動的動畫。 */
.list-leave-active {position: absolute;
}
</style>
自定義過渡組 class

你還可以通過向 傳遞 moveClass prop 為移動元素指定自定義過渡 class,類似于自定義過渡 class。
在 中,你可以通過以下屬性來自定義過渡類:

  • enter-active-class:定義進入時的活動類。
  • leave-active-class:定義離開時的活動類。
  • move-class:定義移動時的類(用于列表項的重新排序動畫)。
    這些類允許你自定義進入、離開和移動時的動畫效果。
<template><div><button @click="addItem">Add Item</button><button @click="removeItem">Remove Item</button><TransitionGroupenter-active-class="custom-enter-active"leave-active-class="custom-leave-active"move-class="custom-move"tag="div"class="list-group"><divv-for="(item, index) in items":key="item":data-index="index"class="list-item">{{ item }}</div></TransitionGroup></div>
</template><script>
import { ref } from 'vue';export default {setup() {const items = ref(['Item 1', 'Item 2', 'Item 3']);const nextId = ref(4);const addItem = () => {items.value.push(`Item ${nextId.value++}`);};const removeItem = () => {items.value.pop();};return { items, addItem, removeItem };},
};
</script><style>
.list-group {display: flex;flex-direction: column;gap: 10px;
}.list-item {padding: 10px;background-color: #f0f0f0;border-radius: 4px;
}/* 自定義進入活動類 */
.custom-enter-active {animation: fadeIn 0.5s ease-out;
}/* 自定義離開活動類 */
.custom-leave-active {animation: fadeOut 0.5s ease-out;
}/* 自定義移動類 */
.custom-move {transition: transform 0.5s ease;
}/* 自定義動畫 */
@keyframes fadeIn {from {opacity: 0;transform: translateX(-20px);}to {opacity: 1;transform: translateX(0);}
}@keyframes fadeOut {from {opacity: 1;transform: translateX(0);}to {opacity: 0;transform: translateX(20px);}
}
</style>
漸進延遲列表動畫
  • 安裝gsap庫:
npm install gsap --save
  • 在組件中中引入gsap庫:
import gsap from 'gsap';
  • 在組件中使用gsap庫:
<script setup>
<template><input v-model="query" /><TransitionGrouptag="ul":css="false"@before-enter="onBeforeEnter"@enter="onEnter"@leave="onLeave"><liv-for="(item, index) in computedList":key="item.msg":data-index="index">{{ item.msg }}</li></TransitionGroup>
</template><script setup lang="ts">import { ref, computed ,unref} from 'vue'import gsap from 'gsap';const list = ref([{ msg: 'Hello' },{ msg: 'World' },{ msg: 'Foo' },{ msg: 'Bar' },{ msg: 'Baz' },]) const query = ref('')const computedList = computed(() => {return list.value.filter((item) => item.msg.toLowerCase().includes(unref(query)))
})const onBeforeEnter = (el: any) => {el.style.opacity = 0el.style.height = 0}
const onEnter=(el, done) => {gsap.to(el, {opacity: 1,height: '1.6em',delay: el.dataset.index * 0.15,onComplete: done})
}
const onLeave =(el, done) =>{gsap.to(el, {opacity: 0,height: 0,delay: el.dataset.index * 0.15,onComplete: done})
} 
</script>

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

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

相關文章

【軟考-架構】14、軟件可靠性基礎

?資料&文章更新? GitHub地址&#xff1a;https://github.com/tyronczt/system_architect 文章目錄 軟件可靠性基本概念軟件可靠性建模軟件可靠性管理軟件可靠性設計N版本程序設計恢復塊設計&#xff08;動態冗余&#xff09;雙機容錯技術、集群技術負載均衡軟件可靠性測試…

使用Python+OpenCV對視頻抽幀保存為JPG圖像

使用PythonOpenCV對視頻抽幀保存為JPG圖像 import os import cv2 import time#視頻文件夾路徑&#xff0c;可修改 videoPath D:\\video\\ #保存的圖片文件夾路徑&#xff0c;可修改 savePath D:\\images\\ videolist os.listdir(videoPath) if not os.path.exists(savePath…

學習整理在centos7上安裝mysql8.0版本教程

學習整理在centos7上安裝mysql8.0版本教程 查看linux系統版本下載mysql數據庫安裝環境檢查解壓mysql安裝包創建MySQL需要的目錄及授權新增用戶組新增組用戶配置mysql環境變量編寫MySQL配置文件初始化數據庫初始化msyql服務啟動mysql修改初始化密碼配置Linux 系統服務工具,使My…

DeepSeek預訓練追求極致的訓練效率的做法

DeepSeek在預訓練階段通過多種技術手段實現了極致的訓練效率,其中包括采用FP8混合精度訓練框架以降低計算和內存需求 ,創新性地引入Multi-head Latent Attention(MLA)壓縮KV緩存以提升推理效率,以及基于Mixture-of-Experts(MoE)的稀疏計算架構以在保證性能的同時顯著降低…

【計算機視覺】CV項目實戰- 深度解析TorchVision_Maskrcnn:基于PyTorch的實例分割實戰指南

深度解析TorchVision_Maskrcnn&#xff1a;基于PyTorch的實例分割實戰指南 技術背景與核心原理Mask R-CNN架構解析項目特點 完整實戰流程環境準備硬件要求軟件依賴 數據準備與標注1. 圖像采集2. 數據標注3. 數據格式轉換 模型構建與訓練1. 模型初始化2. 數據加載器配置3. 訓練優…

x86系列CPU寄存器和匯編指令總結

文章目錄 概要一、寄存器1.1、8086寄存器1.2、通用寄存器1.3、擴展寄存器 二、指令集三、x86指令集常見指令使用說明四、匯編4.1、匯編語法4.2、nsam匯編 五、參考 概要 在對學習Go的過程中&#xff0c;涉及到了匯編&#xff0c;因此對X86系列CPU的背景、寄存器、匯編指令做了一…

戴維斯雙擊選股公式如何編寫?

戴維斯雙擊&#xff0c;指的是營收增長和凈利潤增長同步&#xff0c;并有超預期的財務狀況。 戴維斯雙擊是指在低市盈率&#xff08;P/E&#xff09;時買入股票&#xff0c;待公司盈利增長和市盈率提升后賣出&#xff0c;以獲取雙重收益。以下是一個簡單的通達信選股模型示例&…

前端面試寶典---vue原理

vue的Observer簡化版 class Observer {constructor(value) {if (!value || typeof value ! object) returnthis.walk(value) // 對對象的所有屬性進行遍歷并定義響應式}walk (obj) {Object.keys(obj).forEach(key > defineReactive(obj, key, obj[key]))} } // 定義核心方法…

從“聾啞設備“到超級工廠:EtherCAT轉Modbus協議網關正在重構工業未來

當全球工廠加速邁向工業4.0&#xff0c;您的生產線是否因Modbus設備“拖后腿”而被迫降速&#xff1f;無需百萬改造&#xff01;無需淘汰設備&#xff01;一套EtherCAT從站轉Modbus協議網關&#xff0c;讓30年老機床與智能工廠實時對話&#xff0c;效率飆升300%&#xff01; 一…

Tauri文件系統操作:桌面應用的核心能力(入門系列四)

今天我們來聊聊Tauri中一個超級重要的功能 - 文件系統操作。這可是Web應用和桌面應用最大的區別之一。在瀏覽器里&#xff0c;出于安全考慮&#xff0c;我們對文件系統的訪問被限制得死死的。但在Tauri桌面應用中&#xff0c;我們可以安全地訪問用戶的文件系統&#xff0c;這簡…

Python解析地址中省市區街道

Python解析地址中省市區街道 1、效果 輸入&#xff1a;海珠區沙園街道西基村 輸出&#xff1a; 2、導入庫 pip install jionlp3、示例代碼 import jionlp as jiotext 海珠區沙園街道西基村 res jio.parse_location(text, town_villageTrue) print(res)

基于Node+HeadlessBrowser的瀏覽器自動化方案

基于NodeHeadlessBrowser的瀏覽器自動化方案 什么是無頭瀏覽器(Headless Browser)&#xff1f; 無頭瀏覽器&#xff0c;就像是一個沒有用戶界面的瀏覽器程序。你可以想象它就是一個“隱形”的瀏覽器&#xff0c;只不過它沒有圖形界面&#xff0c;但能做我們用普通瀏覽器所能做…

AEB法規升級后的市場預測與分析:技術迭代、政策驅動與產業變革

文章目錄 一、政策驅動&#xff1a;全球法規升級倒逼市場擴容二、技術迭代&#xff1a;從“基礎防護”到“場景全覆蓋”三、市場格局&#xff1a;競爭加劇與生態重構四、挑戰與未來展望五、投資建議結語 近年來&#xff0c;全球汽車安全法規的加速升級正深刻重塑AEB&#xff08…

【Docker項目實戰】使用Docker部署Caddy+vaultwarden密碼管理工具(詳細教程)

【Docker項目實戰】使用Docker部署vaultwarden密碼管理工具 前言一、vaultwarden介紹1.1 vaultwarden簡介1.2 主要特點二、本次實踐規劃2.1 本地環境規劃2.2 本次實踐介紹三、本地環境檢查3.1 檢查Docker服務狀態3.2 檢查Docker版本3.3 檢查docker compose 版本四、拉取鏡像五、…

第十六屆藍橋杯大賽軟件賽省賽第二場

第十六屆藍橋杯大賽軟件賽省賽第二場 大家好。最近參加了第十六屆藍橋杯大賽軟件賽省賽第二場 Python 大學 B 組的比賽&#xff0c;現在來和大家分享一下我的解題思路和代碼實現。以下內容是我自己寫的&#xff0c;可能對也可能錯&#xff0c;歡迎大家交流討論。 試題 A&…

硬件須知的基本問題2

目錄 1、典型電路 1. DC5V 轉 DC3.3V 電路 2. 通信電路 2、STM32F103RCT6 最小系統如何設計搭建電路 1. 電源電路 2. 復位電路 3. 時鐘電路 4. 下載電路 5. 單片機連接連接 3、請列舉你所知道的二極管型號&#xff1f; 1. 整流二極管 2. 小信號二極管 3. 肖特基二極管 4. 超…

力扣HOT100——102.二叉樹層序遍歷

給你二叉樹的根節點 root &#xff0c;返回其節點值的 層序遍歷 。 &#xff08;即逐層地&#xff0c;從左到右訪問所有節點&#xff09;。 示例 1&#xff1a; 輸入&#xff1a;root [3,9,20,null,null,15,7] 輸出&#xff1a;[[3],[9,20],[15,7]] /*** Definition for a bi…

CSS 定位學習筆記

一、定位概述 CSS 定位是控制 HTML 元素在頁面中位置的核心技術&#xff0c;允許元素脫離正常文檔流&#xff0c;實現復雜布局效果。 二、定位類型對比 定位類型屬性值參考基準是否脫離文檔流常用場景靜態定位static無否默認布局相對定位relative自身原位置否元素微調絕對定…

Threejs中頂視圖截圖

Threejs中頂視圖截圖 一般項目中的每個模型&#xff0c;都需要有一張對應的圖片&#xff0c;一般是頂視圖&#xff0c;在對應的2D場景場景中展示。以下分享一個實現方式&#xff0c;先將清空模型材質的紋理&#xff0c;把顏色設置為白色&#xff0c;使用正交相機截取頂視圖&am…

深度探索:DeepSeek賦能WPS圖表繪制

一、研究背景 在當今數字化信息爆炸的時代&#xff0c;數據處理與可視化分析已成為眾多領域研究和決策的關鍵環節。隨著數據量的急劇增長和數據維度的不斷豐富&#xff0c;傳統的數據可視化工具在應對復雜數據時逐漸顯露出局限性。Excel作為廣泛應用的電子表格軟件&#xff0c;…