中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-10-17 13:44:30 來源:腳本之家 閱讀:285 作者:UCCs 欄目:web開發

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

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

.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。

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

上饶县| 象州县| 五莲县| 龙井市| 白水县| 博湖县| 西安市| 南投县| 台江县| 商洛市| 铅山县| 天台县| 宁夏| 镇平县| 烟台市| 武威市| 伊金霍洛旗| 瓦房店市| 崇信县| 台前县| 噶尔县| 阿瓦提县| 龙川县| 西充县| 阆中市| 交口县| 宁武县| 清水河县| 垦利县| 伊金霍洛旗| 齐河县| 定南县| 西乌珠穆沁旗| 泸西县| 固始县| 嘉鱼县| 长乐市| 巴里| 肥西县| 天津市| 云梦县|