vue內(nèi)置組件Transition的示例詳解
1. Transition定義
Vue 提供了兩個(gè)內(nèi)置組件,可以幫助你制作基于狀態(tài)變化的過(guò)渡和動(dòng)畫(huà):
<Transition>
會(huì)在一個(gè)元素或組件進(jìn)入和離開(kāi) DOM 時(shí)應(yīng)用動(dòng)畫(huà)。<TransitionGroup>
會(huì)在一個(gè) v-for 列表中的元素或組件被插入,移動(dòng),或移除時(shí)應(yīng)用動(dòng)畫(huà)。
簡(jiǎn)單地說(shuō),就是當(dāng)元素發(fā)生變化,比如消失、顯示時(shí),添加動(dòng)畫(huà)讓它更自然過(guò)渡。它是vue內(nèi)置組件,不需要引入注冊(cè)就可以直接使用。
在什么情況會(huì)出現(xiàn)過(guò)渡?
1. v-if
切換
2. v-show
切換
3. 動(dòng)態(tài)組件 component
切換
4. 改變特殊的 key
屬性
前幾個(gè)比較好理解,最后一個(gè)用到了 key
值變化導(dǎo)致元素強(qiáng)制更新。下面例子的key值變化,vue會(huì)認(rèn)為這里產(chǎn)生了一個(gè)新元素,之前的會(huì)被刪除,從而導(dǎo)致過(guò)渡。
<script setup> import { ref } from 'vue' const keyValue = ref(1) </script> <template> <button @click="() =>keyValue = Math.random()">Toggle</button> <Transition > <p :key="keyValue">hello</p> </Transition> </template> <style> .v-enter-active, .v-leave-active { transition: opacity 0.5s ease; } .v-enter-from, .v-leave-to { opacity: 0; } </style>
2. 添加過(guò)渡效果
如果不給命名的話(huà),添加動(dòng)畫(huà)效果的默認(rèn)類(lèi)名前綴是 v-
v-enter-active
:進(jìn)入動(dòng)畫(huà)的生效狀態(tài)
v-leave-active
:離開(kāi)動(dòng)畫(huà)的生效狀態(tài)
v-enter-from
:剛進(jìn)入動(dòng)畫(huà)的開(kāi)始狀態(tài)
v-leave-to
:離開(kāi)動(dòng)畫(huà)時(shí)的結(jié)束狀態(tài)
v-enter-to
:剛進(jìn)入動(dòng)畫(huà)的結(jié)束狀態(tài)
v-leave-from
:離開(kāi)動(dòng)畫(huà)的結(jié)開(kāi)始態(tài)一般前4種用得比較多,兩個(gè)生效狀態(tài),加上進(jìn)入動(dòng)畫(huà)的開(kāi)始狀態(tài)和離開(kāi)動(dòng)畫(huà)時(shí)的結(jié)束狀態(tài)。
3. 自定義過(guò)渡類(lèi)名
通過(guò) name
可以自定義 <Transition>
的過(guò)渡類(lèi)名。
<Transition name="a"> ... </Transition>
.a-enter-active, .a-leave-active { transition: opacity 0.5s ease; } .a-enter-from, .a-leave-to { opacity: 0; }
注意:里面只能有一個(gè)根組件,但使用 v-if、v-else、v-else-if
切換顯示是可以的。如果想對(duì)列表中的元素設(shè)置過(guò)渡,可以使用 <TransitionGroup >
4. 深層元素的過(guò)渡
可以給深層級(jí)的元素設(shè)置過(guò)渡效果。
<Transition name="fade"> <div v-if="show" class="outer"> <div class="inner"> Hello </div> </div> </Transition>
/* 應(yīng)用于嵌套元素的規(guī)則 */ .fade-enter-active .inner, .fade-leave-active .inner { transition: all 0.3s ease-in-out; } .fade-enter-from .inner, .fade-leave-to .inner { transform: translateX(30px); opacity: 0; }
duration
屬性設(shè)置過(guò)渡持續(xù)的時(shí)間,單位是毫秒。
<Transition :duration="550">...</Transition>
5. 過(guò)渡的鉤子函數(shù)
<Transition @before-enter="onBeforeEnter" @enter="onEnter" @after-enter="onAfterEnter" @enter-cancelled="onEnterCancelled" @before-leave="onBeforeLeave" @leave="onLeave" @after-leave="onAfterLeave" @leave-cancelled="onLeaveCancelled" > ... <<Transition>
6. 封裝過(guò)渡效果
<!-- MyTransition.vue --> <script> // JavaScript 鉤子邏輯... </script> <template> <!-- 包裝內(nèi)置的 Transition 組件 --> <Transition name="my-transition" @enter="onEnter" @leave="onLeave"> <slot></slot> <!-- 向內(nèi)傳遞插槽內(nèi)容 --> </Transition> </template> <style> </style>
注意:該組件樣式不要添加 scoped
, 不然插槽內(nèi)沒(méi)有過(guò)渡效果。
<MyTransition> <div v-if="show">Hello</div> </MyTransition>
7. 過(guò)渡模式
可以設(shè)置屬性 mode
為 out-in
或 in-out
in-out
表示當(dāng)前元素先進(jìn)行過(guò)渡,完成之后新元素過(guò)渡進(jìn)入。通常我們更多的會(huì)使用out-in,讓當(dāng)前元素先離開(kāi),然后再進(jìn)行新元素的進(jìn)入 。
到此這篇關(guān)于vue內(nèi)置組件Transition的詳解的文章就介紹到這了,更多相關(guān)vue內(nèi)置組件Transition內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue實(shí)現(xiàn)編輯器鍵盤(pán)抬起時(shí)內(nèi)容跟隨光標(biāo)距頂位置向上滾動(dòng)效果
這篇文章主要介紹了vue實(shí)現(xiàn)編輯器鍵盤(pán)抬起時(shí)內(nèi)容跟隨光標(biāo)距頂位置向上滾動(dòng)效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05Vue常見(jiàn)錯(cuò)誤Error?in?mounted?hook解決辦法
這篇文章主要給大家介紹了關(guān)于Vue常見(jiàn)錯(cuò)誤Error?in?mounted?hook的解決辦法,出現(xiàn)這樣的問(wèn)題,會(huì)發(fā)現(xiàn)跟聲明周期鉤子有關(guān)系,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07vue 實(shí)現(xiàn)通過(guò)vuex 存儲(chǔ)值 在不同界面使用
今天小編就為大家分享一篇vue 實(shí)現(xiàn)通過(guò)vuex 存儲(chǔ)值 在不同界面使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11關(guān)于element-ui?單選框默認(rèn)值不選中的解決
這篇文章主要介紹了關(guān)于element-ui?單選框默認(rèn)值不選中的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09vue-quill-editor實(shí)現(xiàn)圖片上傳功能
這篇文章主要為大家詳細(xì)介紹了vue-quill-editor實(shí)現(xiàn)圖片上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08Vue中使用vue-count-to(數(shù)字滾動(dòng)插件)詳細(xì)教程
這篇文章主要給大家介紹了關(guān)于Vue中使用vue-count-to(數(shù)字滾動(dòng)插件)的相關(guān)資料,最近需要開(kāi)發(fā)一個(gè)數(shù)字滾動(dòng)效果,在網(wǎng)上找到一個(gè)關(guān)于vue-countTo的插件,覺(jué)得這個(gè)插件還不錯(cuò),需要的朋友可以參考下2023-09-09vue讀取本地的excel文件并顯示在網(wǎng)頁(yè)上方法示例
這篇文章主要介紹了vue讀取本地的excel文件并顯示在網(wǎng)頁(yè)上方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05vue開(kāi)發(fā)調(diào)試神器vue-devtools使用詳解
這篇文章主要為大家詳細(xì)介紹了vue開(kāi)發(fā)調(diào)試神器vue-devtools的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07