vue切換組件動畫 / vue-transition過渡動畫

transition過渡

文檔: https://cn.vuejs.org/v2/guide/transitions.html#CSS-%E8%BF%87%E6%B8%A1
transition標簽包裹router-view or 狀態(tài)切換的標簽 才能實現(xiàn)過度動效!!!

v-enter / v-leave: 進入/離開過度的開始狀態(tài);
v-enter-to / v-leave-to: 進度/離開過度的結(jié)束狀態(tài);
v-enter-active / v-leave-active: 進入/離開過度時的生效狀態(tài);

提供了以上6個類名 or 使用name自定義transition

<style type="text/css">
    .cc-enter-active,  .cc-leave-active{  /* 進入 / 離開 過度生效狀態(tài) */
        transition: all .5s;
    }
    .cc-enter,  .cc-leave-to{             /* 進入狀態(tài) & 結(jié)束狀態(tài) opacity為0 */
        opacity: 0;
        transform: translateX(10px);
    }
</style>
<div id="app">

    <button @click="isShow = !isShow">click</button>

     <transition name="cc">      <!---使用過度自定義name--->
         <div v-show="isShow">11</div>
     </transition>
</div>
<style type="text/css">

    .v-enter{                           /*過度進入時初始狀態(tài)*/
        opacity: 0;
        transform: translateX(100px);
    }
    .v-enter-to, .v-leave{              /*進入過度結(jié)束狀態(tài) & 過度結(jié)束離開初始狀態(tài)*/
        opacity: 1;
        transform: translateX(0px);
    }

    .v-leave-to{                        /*過度結(jié)束狀態(tài)*/
        opacity: 0;
        transform: translateX(-100px);
    }
    .v-enter-active,.v-leave-active{    /*過度動效*/
        transition: all .2s ease;
    }
    p{
        position: absolute;    /* 解決當translateX 進入和離開時的狀態(tài) 朝同一方向移動時往产,會發(fā)生該節(jié)點從Dom樹上刪除而導致重繪 發(fā)生閃跳*/
    }
</style>
<div id="app">

    <button @click="isShow = !isShow">click</button>

    <div>
        <transition>   
                <p key="1" v-if="isShow">Lorem ipsum dolor sit amet.</p>
                <p key="2" v-else>no data</p>
        </transition>
    </div>  
</div>

vue 動畫
<style type="text/css">
    .sss-enter-active {            /*進入時執(zhí)行的動畫*/
      animation: mmm .5s;
    }
    .sss-leave-active {             /*離開時執(zhí)行的動畫*/
      animation: mmm .5s reverse;  /*reverse 進入時0%到100%,離開時100%到0%*/
    }
    @keyframes mmm {
      0% {
        transform: scale(0);
      }
      50% {
        transform: scale(1.5);
      }
      100% {
        transform: scale(1);
      }
    }
    div{
        max-width: 200px;
    }
</style>
<div id="app">

    <button @click="isShow = !isShow">click</button>

    <div>
        <transition name="sss">
                <p v-if="isShow">Lorem ipsum dolor sit amet.</p>
        </transition>
    </div>  
</div>
自定義過度類名 & animate.css第三方動畫插件結(jié)合使用
<div id="app">

    <button @click="isShow = !isShow">click</button>

    <transition 
        enter-active-class="animated bounce"            //進入時動效
        leave-active-class="animated bounceOutRight">   //離開時動效

        <p v-show="isShow">22222</p>

    </transition>
</div>
先引入animate.css
多元素過度
<style type="text/css">

    .sss-enter-active {
      animation: mmm .2s;
    }
    .sss-leave-active {
      animation: mmm .2s reverse;
    }
    @keyframes mmm {
        0% {
            opacity: 0;
            transform: translateX(100px);
        }
        100% {
            opacity: 1;
            transform: translateX(0px);
        }
    }
    div{
        max-width: 200px;
    }
</style>
<div id="app">

    <button @click="isShow = !isShow">click</button>

    <div>
        <transition name="sss" mode="out-in">  //不添加mode就是同時
                <p key="1" v-if="isShow">Lorem ipsum dolor sit amet.</p>
                <p key="2" v-else>no data</p>
        </transition>
    </div>  
</div>

<style type="text/css">

    .sss-enter-active {
      animation: sta .2s;
    }
    .sss-leave-active {
      animation: lea .2s;
    }
    @keyframes sta {
        0% {
            opacity: 0;
            transform: translateX(100px);
        }
        100% {
            opacity: 1;
            transform: translateX(0px);
        }
    }
    @keyframes lea {
        0% {
            opacity: 1;
            transform: translateX(0px);
        }
        100% {
            opacity: 0;
            transform: translateX(-100px);
        }
    }
    div{
        max-width: 200px;
        position: relative;
    }
    p{
        position: absolute;
    }
</style>
<div id="app">

    <button @click="isShow = !isShow">click</button>

    <div>
        <transition name="sss">   
                <p key="1" v-if="isShow">Lorem ipsum dolor sit amet.</p>
                <p key="2" v-else>no data</p>
        </transition>
    </div>  
</div>

實際應用

app.vue中設置頁面切換全局動畫

  <template>
  <div class="app-container">
     <!-- 頁頭 -->
     <mt-header v-show="$route.meta.showHeader" class="mt-header" fixed title="vue-project">
          <span slot="left" @click="goBack" v-show="flag">
                  <mt-button icon="back">返回</mt-button>
          </span>
     </mt-header> 


 <!-- 點擊tabbar中間的內(nèi)容切換動畫  step1.-->
     <transition mode="out-in">
              <!-- 點擊tabbar組件跳轉(zhuǎn)不同的頁面贡茅,共同顯示的中間內(nèi)容 -->
        <router-view></router-view> 
     </transition>


 <!-- tablebar -->
    <nav class="mui-bar mui-bar-tab">
        <router-link class="mui-tab-item-li" to="/home"> <!--在index.js中l(wèi)inkactive被替換的mui-active-->
            <span class="mui-icon mui-icon-home"></span>
            <span class="mui-tab-label">首頁</span>
        </router-link>

        <router-link class="mui-tab-item-li" to="/member">
            <span class="mui-icon mui-icon-contact"></span>         
            <span class="mui-tab-label">會員</span>
        </router-link>

        <router-link class="mui-tab-item-li" to="/cart">
            <span class="mui-icon mui-icon-extra mui-icon-extra-cart"><span class="mui-badge">{{$store.getters.getAllCount}}</span></span>
            <span class="mui-tab-label">購物車</span>
        </router-link>

        <router-link class="mui-tab-item-li" to="/search">
            <span class="mui-icon mui-icon-search"></span>
            <span class="mui-tab-label">搜素</span>
        </router-link>
    </nav>

</div>
</template>

style

.app-container{
padding-top: 40px;
padding-bottom: 50px;     /*設置導航頭與tabbar占據(jù)空間,是為了中間顯示內(nèi)容不會隱藏到those的背后*/

overflow-x: hidden;       /*隱藏動畫translateX(-100%)多余部分  step3.*/

/* max-width: 600px; */
/* margin: 0 auto; */
}

.v-enter,
.v-leave-to{
opacity: 0;
transform: translateX(-100%);
}
.v-enter-active,.v-leave-active{
transition: all 0.2s ease;
}
/* 結(jié)合transition使用的過渡切換效果  
  進入和離開時的動畫弓乙,都是頁面向左整個移動整個頁面距離
step2.*/
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌脐往,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扳埂,死亡現(xiàn)場離奇詭異业簿,居然都是意外死亡,警方通過查閱死者的電腦和手機阳懂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門梅尤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人岩调,你說我怎么就攤上這事巷燥。” “怎么了号枕?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵缰揪,是天一觀的道長。 經(jīng)常有香客問我葱淳,道長钝腺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任赞厕,我火速辦了婚禮艳狐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘皿桑。我一直安慰自己毫目,他們只是感情好,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布诲侮。 她就那樣靜靜地躺著镀虐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪浆西。 梳的紋絲不亂的頭發(fā)上粉私,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天顽腾,我揣著相機與錄音近零,去河邊找鬼诺核。 笑死,一個胖子當著我的面吹牛久信,可吹牛的內(nèi)容都是我干的窖杀。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼裙士,長吁一口氣:“原來是場噩夢啊……” “哼入客!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起腿椎,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤桌硫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后啃炸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铆隘,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年南用,在試婚紗的時候發(fā)現(xiàn)自己被綠了膀钠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡裹虫,死狀恐怖肿嘲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情筑公,我是刑警寧澤雳窟,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站匣屡,受9級特大地震影響涩拙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜耸采,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一兴泥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧虾宇,春花似錦搓彻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至搪泳,卻和暖如春稀轨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背岸军。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工奋刽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瓦侮,地道東北人。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓佣谐,卻偏偏與公主長得像肚吏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子狭魂,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容