1. 程式人生 > >Vue學習之路(七)---transition過渡動畫

Vue學習之路(七)---transition過渡動畫

vue中過度動畫v-if和v-show都可以使用,首先要明白四個狀態,v-enter(剛開始進入) ,v-enter-active(進入過程中到進入完畢),v-leave-enter(剛開始離開),v-leave-enter-active(離開過程中到離開),示例圖如下
這裡寫圖片描述

好的,弄清楚了這四種狀態,然後我們就可以簡單的開始transition過渡的實操了,在v-enter-active以及v-leave-enter時這個時候的狀態是初始值,比如說opacity這個屬性,它的值是1

1.用樣式實現簡單的過渡效果

App.Vue中
關鍵程式碼

//html中
<button
@click='move'>
實現過渡效果</button> <transition name='my-trans'>//my-trans樣式字首的名字 <div v-show='isShow'>這是一段程式碼</div> </transition> //data中 data () { isShow : true; } //methods中 methods: { move () { this.isShow = !this.isShow } } //style中 <style> .my-trans-enter-active
,.my-trans-leave-enter { transition: all 1s ease-out; } .my-trans-enter { transform: translateY(-500px);//從上面進入 } .my-trans-leave-active { transform: translateY(500px);//從下面離開 }
</style>

注意當我們使用v-if 和 v-else 的時候,當兩個標籤都是統一型別的,vue不會實現動畫,這個時候必須加上key,例如

//其他程式碼同上
//html中
<button @click='move'>實現過渡效果 </button >
<transition name='my-trans'
mode='out-in'>//my-trans樣式字首的名字 <div v-if="isShow" key='1'>這是第一段程式碼</div> <div v-else key='2'>這是第二段程式碼</div> </transition>

這個時候可能實現的效果是兩段程式碼會同時出現,顯得很難看,只需要在transition上面加上mode=’out-in’(先出後進)就可以了

2.實現元件的過渡

首先我們需要兩個元件檔案a.vue和b.vue
//a.vue中

<template>
  <div>這是第一個元件</div>
</template>
<script>
 export default {
  data () {
   return {

   }
  }
}
</script>

b.vue中

<template>
  <div>這是第二個元件</div>
</template>
<script>
 export default {
  data () {
   return {

   }
  }
}
</script>

關鍵程式碼
在主元件中App.vue中引入兩個子元件
import compA from ‘./components/a’
import compA from ‘./components/b’
前面我寫過關於如何實現兩個元件之間的切換,接下來再寫一遍

//html中
<button @click='move'>實現過渡效果</button>
<transition name='my-trans'>//my-trans樣式字首的名字
  <div :is='comName'></div>
</transition>
components : {comA,comB}//引入兩個元件
//data中
data () {
 isShow : true,
 comName: 'com-a',
}
//methods中
methods: {
 move () {
   this.isShow = !this.isShow;
   if(this.comName === 'com-a'){//如果是元件a,實現兩個元件之間的切換
     this.comName = 'com-b';
   }else {
     this.comName = 'com-a'
   }
  }
}
//style中
<style>
.my-trans-enter-active,.my-trans-leave-enter {
  transition: all 1s ease-out;
}
.my-trans-enter {
  transform: translateY(-500px);//從上面進入
}
.my-trans-leave-active {
 transform: translateY(500px);//從下面離開
}
</style>