多個(gè)元素之間過(guò)渡動(dòng)畫(huà)效果
為德清等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及德清網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站制作、做網(wǎng)站、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、德清網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
多元素之間如何實(shí)現(xiàn)過(guò)渡動(dòng)畫(huà)效果呢?看下面代碼
.fade-enter, .fade-leave-to{ opacity: 0; } .fade-enter-active, .fade-leave-active{ transition: opacity 3s; } <div id="root"> <transition name="fade"> <div v-if="show">hello world</div> <div v-else>bye world</div> </transition> <button @click="handleClick">切換</button> </div> let vm = new Vue({ el: '#root', data: { show: true }, methods: { handleClick() { this.show = !this.show } } })
這么寫(xiě)行不行呢?肯定是不行的,因?yàn)?Vue 在兩個(gè)元素進(jìn)行切換的時(shí)候,會(huì)盡量復(fù)用dom,就是因?yàn)檫@個(gè)原因,導(dǎo)致現(xiàn)在動(dòng)畫(huà)效果不會(huì)出現(xiàn)。
如果不讓 Vue 復(fù)用dom的話,應(yīng)該怎么做呢?只需要給這兩個(gè)div不同的key值就行了
<div v-if="show" key="hello">hello world</div> <div v-else key="bye">bye world</div>
這個(gè)時(shí)候當(dāng)div元素進(jìn)行切換的時(shí)候,就不會(huì)復(fù)用了。
mode
Vue 提供了一mode屬性,來(lái)實(shí)現(xiàn)多個(gè)元素切換時(shí)的效果
mode取值in-out,動(dòng)畫(huà)效果是先出現(xiàn)在隱藏
<div id="root"> <transition name="fade" mode="in-out"> //第一次點(diǎn)擊時(shí),執(zhí)行順序?yàn)椋孩佗? <div v-if="show">hello world</div> //再消失 ② <div v-else>bye world</div> //先顯示 ① </transition> <button @click="handleClick">切換</button> </div>
mode取值為out-in,動(dòng)畫(huà)效果為先隱藏在出現(xiàn)
<div id="root"> <transition name="fade" mode="out-in"> //第一次點(diǎn)擊時(shí),執(zhí)行順序?yàn)椋孩佗? <div v-if="show">hello world</div> //先消失 ① <div v-else>bye world</div> //再顯示 ② </transition> <button @click="handleClick">切換</button> </div>
多個(gè)組件之間過(guò)渡動(dòng)畫(huà)效果
這里需要借助動(dòng)態(tài)組件來(lái)實(shí)現(xiàn)多組件之間過(guò)渡動(dòng)畫(huà)效果
先用普通的方式來(lái)實(shí)現(xiàn)切換:
.fade-enter, .fade-leave-to{ opacity: 0; } .fade-enter-active, .fade-leave-active{ transition: opacity 1s; } <div id="root"> <transition name="fade" mode="in-out"> <child-one v-if="show"></child-one> <child-two v-else></child-two> </transition> <button @click="handleClick">切換</button> </div> Vue.component('child-one',{ template:'<div>child-one</div>' }) Vue.component('child-two',{ template:'<div>child-two</div>' }) let vm = new Vue({ el: '#root', data: { show: true }, methods: { handleClick() { this.show = !this.show } } })
你會(huì)發(fā)現(xiàn),這樣子實(shí)現(xiàn)組件切換,transition動(dòng)畫(huà)效果是存在的,但是我們想要用動(dòng)態(tài)組件來(lái)實(shí)現(xiàn),該怎么弄呢?
可查看之前的文章:Vue 動(dòng)態(tài)組件與 v-once 指令,這篇文章中詳細(xì)的介紹了 Vue 的動(dòng)態(tài)組件
列表過(guò)渡
這里需要使用一個(gè)新標(biāo)簽transition-group來(lái)是實(shí)現(xiàn)
.fade-enter, .fade-leave-to{ opacity: 0; } .fade-enter-active, .fade-leave-active{ transition: opacity 1s; } <div id="root"> <transition-group name="fade"> <div v-for="item of list" :key="item.id">{{item.title}}-----{{item.id}}</div> </transition-group> <button @click="handleClick">添加</button> </div> let vm = new Vue({ el: '#root', data: { count:0, list:[] }, methods: { handleClick() { this.list.push({ id:this.count ++, title:'hello world' }) } } })
為什么使用了transition-group標(biāo)簽后,就可以出現(xiàn)過(guò)渡動(dòng)畫(huà)效果了呢?看下面代碼:
<transition-group name="fade"> <div>hello world</div> <div>hello world</div> <div>hello world</div> </transition-group>
在循環(huán)過(guò)后,頁(yè)面中會(huì)出現(xiàn)一個(gè)個(gè)div元素,如果你在外面添加一個(gè)transition-group的標(biāo)簽,相當(dāng)于你在每一個(gè)div外層都加了一個(gè)transition標(biāo)簽,看下面代碼
<transition> <div>hello world</div> </transition> <transition> <div>hello world</div> </transition> <transition> <div>hello world</div> </transition>
這時(shí)候,Vue 把列表的過(guò)渡轉(zhuǎn)化為單個(gè)的div元素的過(guò)渡了,Vue 會(huì)在這個(gè)元素隱藏或者顯示的時(shí)候動(dòng)態(tài)的找到時(shí)間點(diǎn),增加對(duì)應(yīng)的class。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
當(dāng)前文章:Vue中多個(gè)元素、組件的過(guò)渡及列表過(guò)渡的方法示例
新聞來(lái)源:http://www.chinadenli.net/article2/pidjic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站設(shè)計(jì)、響應(yīng)式網(wǎng)站、全網(wǎng)營(yíng)銷推廣、自適應(yīng)網(wǎng)站、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)