Vue transition過渡組件詳解
一、vue里面的transition組件
Vue提供了這個transition組件,可以使得在v-if條件渲染、v-show條件顯示、動態(tài)組件的時候可以給到任意元素和組件添加了進入或離開元素過渡。
二、transition組件應(yīng)用CSS過渡
在應(yīng)用css過渡的時候,transition組件會在恰當(dāng)?shù)臅r候添加、刪除元素。我們的transition組件包含了一下6類過渡類別;
- v-enter:定義在進入過渡的時候,元素在插入之前生效,在元素被插入之后的下一幀溢出。
- v-enter-active:在定義的時候,在過渡生效的狀態(tài),在整個進入過渡的階段中應(yīng)用,在元素被插入前生效,在過渡完成之后移除。
- v-enter-to:定義進入過渡的結(jié)束狀態(tài),在元素被插入之后下一幀生效,過渡完成后移除。
- v-leave:定義在離開過渡的開始狀態(tài),在離開過渡被觸發(fā)的時候立刻生效,下一幀就會被移出。
- v-leave-active:在定義離開的過渡生效時狀態(tài)。
- v-leave-to:定義在離開過渡的結(jié)束狀態(tài)。
我們總結(jié)的這6個過渡類,前三個是進入過渡的類,后面三個是離開過渡的類,在進入或者離開的過程中,這里6個過渡類之間相互切換。
(1)單元數(shù)/組件過渡
在transition組件中只會包含一個元素,在這個元素插入或者刪除的時候定義過渡。我們可以通過一行代碼段進行了解一下:
實例代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<title>動態(tài)</title>
</head>
<body>
<div id="app">
<input type="checkbox" v-model="guodu" id="game"/>
<label for="game">我已經(jīng)知曉未成年人游戲時間公告</label>
<transition name="fade">
<p v-if="guodu"><button>開始游戲</button></p>
</transition>
</div>
<script src="http://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
<script>
var vm = new Vue({
el:"#app",
data:{guodu:false}
});
</script>
<style>
.fade-enter,
.fade-leave-to {
opacity: 0;
transform: translateX(100px);
}
.fade-enter-active,
.fade-leave-active {
transition: all 2s;
}
</style>
</body>
</html>運行結(jié)果:我們可以看到但單擊選中“我已知曉王者未成年人游戲時間公告”的復(fù)選框,然后就會在頁面上淡出我們的“開始游戲”,但我們在取消勾選的時候,“開始游戲”就會淡出我們的頁面。

因為我們的組件設(shè)置了name=“fade”,然后可以在定義樣式的時候用到fade的前綴,如代碼中的.fade-enter等等,這樣定義好樣式以后,就不用進行手動引入了,transition組件就可以將我們“開始游戲”按鈕的元素恰到好處的添加以及刪除操作。
(2)多個元素過渡
transition組件包含多個元素,這一些元素在插入或者刪除的時候就可以定義過渡。我們還是通過代碼了解一下,不用大肆修改,其他的代碼就不用修改了,我們只要在前面的單個元素部分的章節(jié)上面進行修改就可以了。
實例代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<title>動態(tài)</title>
</head>
<body>
<div id="app">
<input type="checkbox" v-model="DGguodu" id="game"/>
<label for="game">我已經(jīng)知曉未成年人游戲時間公告</label>
<transition name="fade" appear mode="out-in">
<p v-if="DGguodu" key="1"><button>開始游戲</button></p>
<p v-else key="2">先閱讀公告后進行游戲</p>
</transition>
</div>
<script src="http://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
<script>
var vm = new Vue({
el:"#app",
data:{DGguodu:false}
});
</script>
<style>
.fade-enter,
.fade-leave-to {
opacity: 0;
transform: translateX(100px);
}
.fade-enter-active,
.fade-leave-active {
transition: all 2s;
}
</style>
</body>
</html>運行結(jié)果:

我們看到上面結(jié)果,我們可以理解一下,為什么會出現(xiàn)上面這樣的結(jié)果呢,因為我們將transition設(shè)置成了appear模式屬性,這個屬性用于設(shè)置節(jié)點在初始渲染的時候也應(yīng)用過渡的效果。當(dāng)我們選擇復(fù)用框的時候,“先閱讀.....”這一段話就會淡出,“開始游戲”就會淡入。這是因為我們給mode設(shè)置成了out-in,mode屬性用來設(shè)置過渡模式。
(3)多個組件過渡
多個組件的過渡比多個元素過渡更加的簡單,因為他不像元素過渡的時候使用到key屬性,只需要使用動態(tài)組件即可。我們還是通過實例代碼的結(jié)果來加深了解一下:
實例代碼:

(4)列表過渡
列表過渡使用的是transition-group組件,不同于transition這個組件的是,transition-group這個組件含有更多的屬性特性,比如:mode屬性不可用、內(nèi)部只能含有一個key屬性、css過渡得嘞將會應(yīng)用在內(nèi)部元素、渲染的時候以一個真實的元素呈現(xiàn)。我們通過代碼進行了解一下這個列表過渡:
實例代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<title>列表過渡</title>
</head>
<body>
<div id="app">
<h1>2022屆大學(xué)生新生入學(xué)登記:</h1>
<form>
<p><label for="name">姓名:</label>
<input type="text" v-model="stuInfo.name" id="name"></p>
<p><label for="xuehao">學(xué)號:</label>
<input type="xuehao" v-model="stuInfo.xuehao" id="xuehao"></p>
<p><button @click="add" type="button">添加</button></p>
</form>
<transition-group tag="ul" name="fade">
<li v-for="(item,index) in students" :key="item.xuehao">{{index+1}}--{{item.name}}--{{item.xuehao}}<button @click="del(index)">刪除</button>
</li>
</transition-group>
</div>
<script src="http://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
<script>
var vm = new Vue({
el:"#app",
data:{
stuInfo:{xuehao:" "},
students:[]
},
methods:{
add(){
this.students.push(this.stuInfo);
this.stuInfo={};
},
del(index){this.students.splice(index,1);}
}
});
</script>
<style>
.fade-enter,
.fade-leave-to {
opacity: 0;
transform: translateX(100px);
}
.fade-enter-active,
.fade-leave-active {
transition: all 2s;
}
</style>
</body>
</html>運行結(jié)果:

我們這里已經(jīng)將-group的組件設(shè)置成了tag='ul',這樣使得每列表項li元素的key屬性值數(shù)據(jù)中的xuehao的屬性值,確保它的屬性值是唯一的屬性。結(jié)果如上,效果就不多說了,大家觀看即可。
三、JavaScript鉤子
JavaScript的鉤子函數(shù)可以使用transition組件里面的v-on指令綁定,transition過渡的周期可以有以下鉤子函數(shù):
<transition v-on:before-enter="beforeEnter"
v-on:enter="enter"
v-on:after-enter="afterenter"
v-on:enter-cancelled="entercanclled"
v-on:before-leave="beforeLeave"
v-on:leave="leave"
v-on:after-leave="afterLeave"
v-on:leave-cancelled="leaveCancelled"
>
</transition>實例代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<title>鉤子函數(shù)實現(xiàn)動畫</title>
</head>
<body>
<div id="app">
<input type="checkbox" v-model="already" id="ck"/>
<label for="ck">我已經(jīng)閱讀了相關(guān)的報名需求</label>
<transition
@before-enter="beforeEnter"
@enter="enter"
@after-enter="after-enter"
>
<p class="show" v-if="already"><button>確定報名</button></p></transition>
</div>
<script src="http://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
<script>
var vm = new Vue({
el:"#app",
data:{
already:false
},
methods:{
beforeEnter:function(el){
el.style="opacity:0";console.log("beforeEnter");
},
enter:function(el,done) {
el.offsetHeight;
el.style = "opacity:1";
console.log("enter");
done();
},
afterEnter:function(el){
console.log("afterEnter");
}
}
});
</script>
<style>
.show {
transition: all 2s;
}
</style>
</body>
</html>運行結(jié)果:

我們可以看到單擊復(fù)選框的時候,“確認報名”就會慢慢的顯示出啦,而且取消勾選不會淡出!
到此這篇關(guān)于Vue transition過渡組件詳解的文章就介紹到這了,更多相關(guān)Vue transition內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue.js綁定HTML class數(shù)組語法錯誤的原因分析
Vue.js綁定HTML class數(shù)組語法錯誤有哪些原因?qū)е碌哪?,該如何解決呢?下面小編給大家分享Vue.js綁定HTML class數(shù)組語法錯誤的原因分析,感興趣的朋友一起看看吧2016-10-10
vue中for循環(huán)更改數(shù)據(jù)的實例代碼(數(shù)據(jù)變化但頁面數(shù)據(jù)未變)
這篇文章主要介紹了vue中for循環(huán)更改數(shù)據(jù)的實例代碼(數(shù)據(jù)變化但頁面數(shù)據(jù)未變)的相關(guān)資料,需要的朋友可以參考下2017-09-09
Element-UI 解決el-table中圖片懸浮被遮擋問題小結(jié)
在開發(fā)中,發(fā)現(xiàn)element-ui在el-table中添加圖片懸浮顯示時,會被單元格遮擋的問題,對于此問題解決其實也并不難,將懸浮圖片放在body節(jié)點下,通過定位顯示即可,感興趣的朋友跟隨小編一起看看吧2024-06-06
vue最強table vxe-table 虛擬滾動列表 前端導(dǎo)出問題分析
最近遇到個問題,后臺一次性返回2萬條列表數(shù)據(jù)并且需求要求所有數(shù)據(jù)必須全部展示,不能做假分頁,怎么操作呢,下面通過本文介紹下vue最強table vxe-table 虛擬滾動列表 前端導(dǎo)出問題,感興趣的朋友一起看看吧2023-10-10
關(guān)于vue-router的使用及實現(xiàn)原理
這篇文章主要介紹了關(guān)于vue-router的使用及實現(xiàn)原理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06

