国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Vue中多個元素、組件的過渡及列表過渡的方法示例

2019-11-19 12:09:16
字體:
來源:轉載
供稿:網友

多個元素之間過渡動畫效果

多元素之間如何實現過渡動畫效果呢?看下面代碼

.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    }  }})

這么寫行不行呢?肯定是不行的,因為 Vue 在兩個元素進行切換的時候,會盡量復用dom,就是因為這個原因,導致現在動畫效果不會出現。

如果不讓 Vue 復用dom的話,應該怎么做呢?只需要給這兩個div不同的key值就行了

<div v-if="show" key="hello">hello world</div><div v-else key="bye">bye world</div>

這個時候當div元素進行切換的時候,就不會復用了。

mode

Vue 提供了一mode屬性,來實現多個元素切換時的效果

mode取值in-out,動畫效果是先出現在隱藏

<div id="root">  <transition name="fade" mode="in-out">  //第一次點擊時,執行順序為:①②    <div v-if="show">hello world</div> //再消失 ②    <div v-else>bye world</div>    //先顯示 ①  </transition>  <button @click="handleClick">切換</button>  </div>

mode取值為out-in,動畫效果為先隱藏在出現

<div id="root">  <transition name="fade" mode="out-in">  //第一次點擊時,執行順序為:①②    <div v-if="show">hello world</div> //先消失 ①    <div v-else>bye world</div>    //再顯示 ②  </transition>  <button @click="handleClick">切換</button>  </div>

多個組件之間過渡動畫效果

這里需要借助動態組件來實現多組件之間過渡動畫效果

先用普通的方式來實現切換:

.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    }  }})

你會發現,這樣子實現組件切換,transition動畫效果是存在的,但是我們想要用動態組件來實現,該怎么弄呢?

可查看之前的文章:Vue 動態組件與 v-once 指令,這篇文章中詳細的介紹了 Vue 的動態組件

列表過渡

這里需要使用一個新標簽transition-group來是實現

.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標簽后,就可以出現過渡動畫效果了呢?看下面代碼:

<transition-group name="fade">  <div>hello world</div>  <div>hello world</div>  <div>hello world</div></transition-group>

在循環過后,頁面中會出現一個個div元素,如果你在外面添加一個transition-group的標簽,相當于你在每一個div外層都加了一個transition標簽,看下面代碼

<transition>  <div>hello world</div></transition><transition>  <div>hello world</div></transition><transition>  <div>hello world</div></transition>

這時候,Vue 把列表的過渡轉化為單個的div元素的過渡了,Vue 會在這個元素隱藏或者顯示的時候動態的找到時間點,增加對應的class。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 正蓝旗| 巴彦县| 马关县| 醴陵市| 蒙城县| 龙里县| 信丰县| 青铜峡市| 中宁县| 洪泽县| 汝南县| 天峨县| 景洪市| 湘乡市| 岳阳市| 枞阳县| 建昌县| 石台县| 察隅县| 岳阳县| 喀什市| 武汉市| 潼关县| 根河市| 福建省| 荆门市| 清镇市| 丹巴县| 基隆市| 桦甸市| 攀枝花市| 游戏| 岫岩| 岐山县| 六盘水市| 电白县| 邮箱| 白城市| 威海市| 和硕县| 延边|