Vue中transition單個(gè)節(jié)點(diǎn)過渡與transition-group列表過渡全過程
transition單個(gè)節(jié)點(diǎn)過渡與transition-group列表過渡
transition:只能滿足單個(gè)節(jié)點(diǎn)的過渡效果,在多個(gè)節(jié)點(diǎn)的渲染上顯得力不從心
為了更好適用于更多的場(chǎng)景,vue 提供 <transition-ground>來(lái)多個(gè)元素的過渡
首先創(chuàng)建了一個(gè)簡(jiǎn)單的應(yīng)用,通過button 來(lái)實(shí)現(xiàn)動(dòng)態(tài)的加減,使用了啊你,實(shí)際效果可運(yùn)行一下代碼
<body> ?
? ? ? ?<div id="app"> ?
? ? ? ?<button @click="add">add</button> ?
? ? ? ?<button @click="move">remove</button> ?
? ? ? ? ? ?<transition-group ?
? ? ? ? ? ?name="list" ?
? ? ? ? ? ?enter-active-class="animated bounceInDown" ?
? ? ? ? ? ?leave-active-class="animated bounceOut" ?
? ? ? ? ? ?> ?
? ? ? ? ? ? ? ?<li v-for="item in num" :key="item">{{item}}</li> ?
? ? ? ? ? ?</transition-group> ?
? ? ? ?</div> ?
??
? ?</body> ?? ?<script> ?
? ? ? ?var app=new Vue({ ?
? ? ? ? ? ?el:"#app", ?
? ? ? ? ? ?data:{ ?
? ? ? ? ? ? ? ?show:true, ?
? ? ? ? ? ? ? ?num:10, ?
? ? ? ? ? ? ? ?statu:false ?
? ? ? ? ? ?}, ?
? ? ? ? ? ?methods:{ ?
? ? ? ? ? ? ? ?add:function(){ ?
? ? ? ? ? ? ? ? ? ? ?this.num++; ?
? ? ? ? ? ? ? ? ? ?}, ?
? ? ? ? ? ? ? ?move:function(){ ?
? ? ? ? ? ? ? ? ? ?this.num--; ?
? ? ? ? ? ? ? ?} ?
? ? ? ? ? ?} ?
? ? ? ?}); ?
? ?</script> ?transition-group:???????擁有transition所有屬性
但是需要關(guān)注的是它們的不同之處:
- transition本身不會(huì)渲染出元素
- 但是transition-group 會(huì)渲染出元素節(jié)點(diǎn);默認(rèn) tag屬性為<span>,可修改。
ps:transition-group 的元素必須指定key 屬性
在列表元素的動(dòng)態(tài)加入移除中,整個(gè)列表會(huì)因?yàn)樵氐母淖兌鄳?yīng)的改變位子,這些位子屬性的改變會(huì)很生硬,所以transition-group給出prop move-class;支持通過 CSS transform 過渡移動(dòng)。當(dāng)一個(gè)子節(jié)點(diǎn)被更新,從屏幕上的位置發(fā)生變化,它將會(huì)獲取應(yīng)用 CSS 移動(dòng)類
? ? ? <style> ?
? ? ? ? .div1{ ?
? ? ? ? ? ? width:156px; ?
? ? ? ? } ?
? ? ? ? .cla1{ ?
? ? ? ? ? ? border:1px solid #222; ?
? ? ? ? ? ? display:inline-block; ?
? ? ? ? ? ? width:50px; ?
? ? ? ? ? ? height:50px; ?
? ? ? ? ? ? text-align: center; ?
? ? ? ? ? ? vertical-align: middle; ?
? ? ? ? } ?
? ? ? ? ? ? .flip-list-move { ?
? transition: transform 1s; ?
} ?
? ? ? ? </style> ?? ? <body> ?
? ? ? ? <div id="app"> ?
? ? ? ? <button @click="chang">reverse</button> ?
? ? ? ? <transition-group tag="div" class="div1" name="flip-list"> ?
? ? ? ? ? ? <span class="cla1" v-for="item in list" :key="item">{{item}}</span> ?
? ? ? ? </transition-group> ?
??
? ? ? ? <button @click="add">add</button> ?
? ? ? ? <button @click="move">remove</button> ?
? ? ? ? ? ? <transition-group ?
? ? ? ? ? ? tag="ul" ?
? ? ? ? ? ? name="flip-list" ?
? ? ? ? ? ? enter-active-class="animated bounceInDown" ?
? ? ? ? ? ? leave-active-class="animated bounceOut" ?
? ? ? ? ? ? > ?
? ? ? ? ? ? ? ? <li v-for="(item,index) in num" :key="item">{{item}}={{index}}</li> ?
? ? ? ? ? ? </transition-group> ?
? ? ? ? </div> ?
? ? </body> ?? ? <script> ?
? ? function shuffle(arr){ ?
? ? var result = [], ?
? ? ? ? random; ?
? ? while(arr.length>0){ ?
? ? ? ? random = Math.floor(Math.random() * arr.length); ?
? ? ? ? result.push(arr[random]) ?
? ? ? ? arr.splice(random, 1) ?
? ? } ?
? ? return result; ?
} ?
? ? ? ? var app=new Vue({ ?
? ? ? ? ? ? el:"#app", ?
? ? ? ? ? ? data:{ ?
? ? ? ? ? ? ? ? show:true, ?
? ? ? ? ? ? ? ? n:3, ?
? ? ? ? ? ? ? ? num:[1,2,3], ?
? ? ? ? ? ? ? ? list:[1,2,3,4,5,6,7,8,9], ?
? ? ? ? ? ? ? ? statu:false ?
? ? ? ? ? ? }, ?
? ? ? ? ? ? methods:{ ?
? ? ? ? ? ? ? ? chang:function(){ ?
? ? ? ? ? ? ? ? ? ? this.list=shuffle(app.list); ?
? ? ? ? ? ? ? ? }, ?
? ? ? ? ? ? ? ? add:function(){ ?
? ? ? ? ? ? ? ? ? ? ? this.num.splice(3,0,++this.n) ?
? ? ? ? ? ? ? ? ? ? }, ?
? ? ? ? ? ? ? ? move:function(){ ?
? ? ? ? ? ? ? ? ? ? ?this.num.splice(3,1) ?
? ? ? ? ? ? ? ? ? ? ?console.log(this.num) ?
? ? ? ? ? ? ? ? } ?
? ? ? ? ? ? } ?
? ? ? ? }); ?
? ? </script> ?transition的過渡作用和transition-group
<transition>標(biāo)簽有兩個(gè)屬性,name 屬性和 mode 屬性。
transition:里的 name 值fade 就是 .fade-enter-active,類名開頭的 fade,
<transition name="fade" mode="out-in">
? ?<router-view/>
? ?<router-view class="left" name="nav" />
? ?<router-view class="right" name="con" />
</transition>
? ? ??
.fade-enter-active, .fade-leave-active {
? transition:opacity .4s;
}
.fade-enter, .fade-leave-to {
? opacity:0;
}注意:transition 里面的<div key="c">111222</div>的內(nèi)容是不顯示,如果要顯示內(nèi)容需要把 transition 標(biāo)簽換成 transition-group 標(biāo)簽,
transition-group:標(biāo)里的所有子元素都要有key值,不然過渡效果是顯示不出來(lái)的,而且每個(gè)子元素標(biāo)簽的key值是不一樣的,不能重復(fù)。
<transition-group name="aaa" mode="in-out"> ? ? <router-view key="d"/> ? ? <router-view class="left" name="nav" key="a" /> ? ? <router-view class="right" name="con" key="b" /> ? ? <div key="c">111222</div> </transition-group>
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue+axios 前端實(shí)現(xiàn)的常用攔截的代碼示例
這篇文章主要介紹了vue+axios 前端實(shí)現(xiàn)的常用攔截的代碼示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2018-08-08
使用 vue 實(shí)現(xiàn)滅霸打響指英雄消失的效果附demo
這篇文章主要介紹了使用 vue 實(shí)現(xiàn)滅霸打響指英雄消失的效果 demo,需要的朋友可以參考下2019-05-05
vue實(shí)現(xiàn)的上拉加載更多數(shù)據(jù)/分頁(yè)功能示例
這篇文章主要介紹了vue實(shí)現(xiàn)的上拉加載更多數(shù)據(jù)/分頁(yè)功能,涉及基于vue的事件響應(yīng)、數(shù)據(jù)交互等相關(guān)操作技巧,需要的朋友可以參考下2019-05-05
vue 監(jiān)聽鍵盤回車事件詳解 @keyup.enter || @keyup.enter.native
今天小編就為大家分享一篇vue 監(jiān)聽鍵盤回車事件詳解 @keyup.enter || @keyup.enter.native,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2018-08-08
vue復(fù)合組件實(shí)現(xiàn)注冊(cè)表單功能
這篇文章主要為大家詳細(xì)介紹了vue復(fù)合組件實(shí)現(xiàn)注冊(cè)表單功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11

