Vue3中Transition和TransitionGroup組件的使用及說(shuō)明
Vue3中的Transition和TransitionGroup組件
在現(xiàn)代前端開(kāi)發(fā)中,用戶(hù)體驗(yàn)是至關(guān)重要的,而動(dòng)畫(huà)效果是提升用戶(hù)體驗(yàn)的重要組成部分。
Vue 3 為我們提供了兩個(gè)強(qiáng)大的組件——Transition 和 TransitionGroup,它們能輕松地為我們的應(yīng)用添加過(guò)渡效果。
一、Transition 組件
Transition 組件主要用于應(yīng)用簡(jiǎn)單的狀態(tài)過(guò)渡效果,例如在元素的進(jìn)入和離開(kāi)時(shí)添加動(dòng)畫(huà)。
它提供了一些有用的勾子(hook)和類(lèi),以便開(kāi)發(fā)者能夠靈活控制過(guò)渡效果。
1. Transition 的基本用法
使用 Transition 組件非常簡(jiǎn)單,只需將其包裹在需要添加動(dòng)畫(huà)的元素外層即可。
<template>
<div>
<button @click="show = !show">Toggle</button>
<transition name="fade">
<div v-if="show" class="box">Hello, Vue 3!</div>
</transition>
</div>
</template>
<script>
export default {
data() {
return {
show: false
};
}
};
</script>
<style>
.fade-enter-active, .fade-leave-active {
transition: opacity 0.5s ease;
}
.fade-enter, .fade-leave-to /* .fade-leave-active 在下一個(gè)版本 */ {
opacity: 0;
}
.box {
padding: 20px;
background-color: #42b983;
color: white;
border-radius: 5px;
}
</style>在上面的代碼中,我們創(chuàng)建了一個(gè)簡(jiǎn)單的切換按鈕,通過(guò) v-if 指令來(lái)控制一個(gè)消息框的顯示與隱藏。
Transition 組件的 name 屬性指向我們?cè)?CSS 中定義的動(dòng)畫(huà)類(lèi)。
2. 提供的鉤子
Transition 還提供了一些過(guò)渡鉤子,可以在過(guò)渡的不同階段進(jìn)行自定義操作。
before-enterenterleaveafter-enterafter-leave
我們可以通過(guò) v-on 指令附加這些鉤子:
<transition
name="fade"
@before-enter="beforeEnter"
@enter="enter"
@leave="leave"
>
<div v-if="show" class="box">Hello, Vue 3!</div>
</transition>
<script>
export default {
methods: {
beforeEnter(el) {
el.style.opacity = 0;
},
enter(el, done) {
el.offsetHeight; // 觸發(fā)重排
el.style.opacity = 1;
done();
},
leave(el, done) {
el.style.opacity = 0;
done();
}
}
};
</script>在這個(gè)例子中,我們使用了一些 JavaScript 方法來(lái)手動(dòng)控制過(guò)渡效果。
二、TransitionGroup 組件
與 Transition 組件不同,TransitionGroup 組件用于列表元素的過(guò)渡效果。
它使我們能夠?yàn)橐唤M元素的進(jìn)入、離開(kāi)和排序提供動(dòng)畫(huà)效果。
1. TransitionGroup 的基本用法
假設(shè)我們有一個(gè)待辦事項(xiàng)列表,并希望在添加或移除列表項(xiàng)時(shí)提供動(dòng)畫(huà)效果:
<template>
<div>
<button @click="addItem">Add Item</button>
<button @click="removeItem">Remove Item</button>
<transition-group name="list" tag="ul">
<li v-for="item in items" :key="item" class="list-item">{{ item }}</li>
</transition-group>
</div>
</template>
<script>
export default {
data() {
return {
items: ['Item 1', 'Item 2', 'Item 3']
};
},
methods: {
addItem() {
this.items.push(`Item ${this.items.length + 1}`);
},
removeItem() {
this.items.pop();
}
}
};
</script>
<style>
.list-enter-active, .list-leave-active {
transition: all 0.5s ease;
}
.list-enter, .list-leave-to {
opacity: 0;
transform: translateY(30px);
}
.list-item {
list-style-type: none;
padding: 10px;
background-color: #42b983;
color: white;
margin: 5px 0;
border-radius: 5px;
}
</style>在這個(gè)示例中,我們使用 TransitionGroup 來(lái)管理一個(gè)動(dòng)態(tài)待辦事項(xiàng)列表。每當(dāng)添加或移除列表項(xiàng)時(shí),都會(huì)觸發(fā)相應(yīng)的過(guò)渡效果。
2. TransitionGroup 的細(xì)節(jié)
TransitionGroup 組件與 Transition 組件的不同之處在于它適合多元素的場(chǎng)景。
它還支持 “move” 過(guò)渡,允許我們?cè)谠仨樞蜃兏鼤r(shí)進(jìn)行平滑動(dòng)畫(huà)。
示例
<template>
<div>
<button @click="shuffle">Shuffle items</button>
<transition-group name="list" tag="ul">
<li v-for="item in items" :key="item" class="list-item">{{ item }}</li>
</transition-group>
</div>
</template>
<script>
export default {
data() {
return {
items: ['Item 1', 'Item 2', 'Item 3', 'Item 4']
};
},
methods: {
shuffle() {
this.items = this.items.sort(() => Math.random() - 0.5);
}
}
};
</script>
<style>
.list-move {
transition: all 0.5s ease;
opacity: 0.5;
}
</style>在這個(gè)示例中,shuffle 方法將隨機(jī)打亂列表項(xiàng)的順序,TransitionGroup 會(huì)自動(dòng)處理相應(yīng)的過(guò)渡動(dòng)畫(huà)。
總結(jié)
Transition 和 TransitionGroup 是 Vue 3 中非常強(qiáng)大的功能,它們?yōu)槲覀兲峁┝艘环N簡(jiǎn)單而靈活的方式來(lái)實(shí)現(xiàn)動(dòng)畫(huà)過(guò)渡。
通過(guò)合理使用這些組件,我們可以顯著提升用戶(hù)體驗(yàn),使我們的應(yīng)用更加生動(dòng)有趣。
希望這篇文章能夠幫助你理解 Transition 和 TransitionGroup 的使用方法,激發(fā)你的靈感,讓你在未來(lái)的項(xiàng)目中充分運(yùn)用這些美妙的工具!
以上僅為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue?2源碼閱讀?Provide?Inject?依賴(lài)注入詳解
這篇文章主要為大家介紹了Vue?2源碼閱讀?Provide?Inject?依賴(lài)注入詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
vue.nextTick()與setTimeout的區(qū)別及說(shuō)明
這篇文章主要介紹了vue.nextTick()與setTimeout的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
基于vuejs實(shí)現(xiàn)一個(gè)todolist項(xiàng)目
這篇文章主要為大家詳細(xì)介紹了基于vuejs實(shí)現(xiàn)一個(gè)todolist項(xiàng)目,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04
vue3.0中setup中異步轉(zhuǎn)同步的實(shí)現(xiàn)
這篇文章主要介紹了vue3.0中setup中異步轉(zhuǎn)同步的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
Vs-code/WebStorm中構(gòu)建Vue項(xiàng)目的實(shí)現(xiàn)步驟
本文主要介紹了在Vs-code/WebStorm中構(gòu)建Vue項(xiàng)目,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
vue-cli4項(xiàng)目開(kāi)啟eslint保存時(shí)自動(dòng)格式問(wèn)題
這篇文章主要介紹了vue-cli4項(xiàng)目開(kāi)啟eslint保存時(shí)自動(dòng)格式的問(wèn)題小結(jié),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
VUE使用day.js顯示時(shí)分秒并實(shí)時(shí)更新時(shí)間效果實(shí)例
vue.js是目前比較流行的前端框架之一,它提供了非常多的基礎(chǔ)組件和工具庫(kù),以方便開(kāi)發(fā)者快速搭建具有可重用性的web應(yīng)用,下面這篇文章主要給大家介紹了關(guān)于VUE使用day.js顯示時(shí)分秒并實(shí)時(shí)更新時(shí)間效果的相關(guān)資料,需要的朋友可以參考下2024-04-04
詳解Vue的computed(計(jì)算屬性)使用實(shí)例之TodoList
本篇文章主要介紹了詳解Vue的computed(計(jì)算屬性)使用實(shí)例之TodoList,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08
如何通過(guò)Vue3+Element?Plus自定義彈出框組件
這篇文章主要給大家介紹了關(guān)于如何通過(guò)Vue3+Element?Plus自定義彈出框組件的相關(guān)資料,彈窗是前端開(kāi)發(fā)中的一種常見(jiàn)需求,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-05-05

