Vue中transition單個節(jié)點過渡與transition-group列表過渡全過程
transition單個節(jié)點過渡與transition-group列表過渡
transition
:只能滿足單個節(jié)點的過渡效果,在多個節(jié)點的渲染上顯得力不從心
為了更好適用于更多的場景,vue 提供 <transition-ground>來多個元素的過渡
首先創(chuàng)建了一個簡單的應(yīng)用,通過button 來實現(xiàn)動態(tài)的加減,使用了啊你,實際效果可運行一下代碼
<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本身不會渲染出元素
- 但是transition-group 會渲染出元素節(jié)點;默認(rèn) tag屬性為<span>,可修改。
ps:transition-group 的元素必須指定key 屬性
在列表元素的動態(tài)加入移除中,整個列表會因為元素的改變而相應(yīng)的改變位子,這些位子屬性的改變會很生硬,所以transition-group給出prop move-class;支持通過 CSS transform 過渡移動。當(dāng)一個子節(jié)點被更新,從屏幕上的位置發(fā)生變化,它將會獲取應(yīng)用 CSS 移動類
? ? ? <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)簽有兩個屬性,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值,不然過渡效果是顯示不出來的,而且每個子元素標(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>
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue+axios 前端實現(xiàn)的常用攔截的代碼示例
這篇文章主要介紹了vue+axios 前端實現(xiàn)的常用攔截的代碼示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08使用 vue 實現(xiàn)滅霸打響指英雄消失的效果附demo
這篇文章主要介紹了使用 vue 實現(xiàn)滅霸打響指英雄消失的效果 demo,需要的朋友可以參考下2019-05-05vue實現(xiàn)的上拉加載更多數(shù)據(jù)/分頁功能示例
這篇文章主要介紹了vue實現(xiàn)的上拉加載更多數(shù)據(jù)/分頁功能,涉及基于vue的事件響應(yīng)、數(shù)據(jù)交互等相關(guān)操作技巧,需要的朋友可以參考下2019-05-05vue 監(jiān)聽鍵盤回車事件詳解 @keyup.enter || @keyup.enter.native
今天小編就為大家分享一篇vue 監(jiān)聽鍵盤回車事件詳解 @keyup.enter || @keyup.enter.native,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08