日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

VUE之多元素组件过渡+动画封装

發布時間:2023/12/16 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VUE之多元素组件过渡+动画封装 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • (1)多元素過渡
  • (2)多組件過渡
  • (3)列表過渡
  • (4)動畫封裝

多元素過渡

  • 首先介紹下如何實現多元素過渡
  • (1)利用條件編譯指令v-if與v-else實現多元素內容切換.
  • (2)接下來在內容切換基礎上,添加過渡動畫,例如漸隱漸現效果
  • 1、transition添加name屬性命名
  • 2、設置過渡狀態
  • (3)狀態管理
  • 測試后發現并沒有過渡效果,分析原因Vue在多個元素切換過程中會盡量復用DOM,如果不加key,那么vue會選擇復用節點(Vue的就地更新策略),導致之前節點的狀態被保留下來,由此產生一系列的bug.。
  • 方案:給多元素添加不同key進行狀態管理,代碼如下
  • 多元素過渡-案例練習
  • 多元素過渡可以通過v-if條件指令進行控制

  • 點擊驗證后發現,在過渡過程中area區域被重繪了,一個離開過渡的時候另一個開始進入過渡。
  • 這是 <transition> 的默認行為 - 即進入和離開同時發生。
  • 方案:在元素絕對定位時候運行正常:
  • 也可以給元素加上轉換屬性,實現滑動過渡的效果

多元素過渡-過渡模式

  • 同時生效的進入和離開的過渡不能滿足所有要求,所以 Vue 提供了兩種過渡模式。
  • ①in-out:新元素先進行過渡,完成之后當前元素過渡離開(不是經常用到,但對于一些稍微不同的過渡效果還是有用的)
  • ②out-in:當前元素先進行過渡,完成之后新元素過渡進入

多組件過渡

  • 接下來介紹下多組件實現過渡效果,代碼如下,直接將多元素修改為多組件即可
  • 多組件過渡也可以結合動態組件進行操作,首先寫個基礎動態組件案例,如下所示
  • 接下來添加transition過渡

列表過渡

  • 目前為止,僅僅實現了單個&&多個元素、單個&&多個組件的過渡動畫,接下來介紹下針對列表增刪時做的一些過渡動畫操作。
  • (1)首先將基礎架構搭建好,要求點擊按鈕時添加新內容到列表尾部
  • (2)目前為止已經實現點擊添加效果,如下所示
  • 之前的一些過渡動畫效果都是針對單個元素組件的隱藏展示,或者多個元素組件來回切換的動畫效果,接下來介紹下列表過渡效果,即列表增刪改動數據時的過渡動畫。
  • 列表過渡動畫標簽<transition-group></transition-group>
  • (1)對于列表過渡需要用到列表過渡標簽transition-group
  • (2)定義CSS過渡效果
  • 此時再次點擊便實現了列表過渡切換效果
<!DOCTYPE html> <html><head><meta charset="utf-8"><title>Vue多元素組件過渡+動畫封裝</title><script src="js/vue-2.6.9.min.js"></script><style type="text/css">.demo {width: 200px;height: 200px;background: red;}.demo1 {width: 200px;height: 200px;background: green;}.fade-enter,.fade-leave-to {opacity: 0;}.fade-enter-active,.fade-leave-active {transition: opacity 2s;}.fade-enter-to,.fade-leave {opacity: 1;}</style></head><body><div id="root"><transition name="fade" mode="out-in"><div class="demo" v-if="status" key="one"></div><div class="demo1" v-else key="two"></div></transition><button @click="handleClick">toggle</button></div><script type="text/javascript">var root = new Vue({el: '#root',data: {status: true},methods: {handleClick() {this.status = !this.status;}}})</script></body> </html> <!DOCTYPE html> <html><head><meta charset="utf-8"><title>Vue多元素組件過渡</title><script src="js/velocity.js"></script><script src="js/vue-2.6.9.min.js"></script><style type="text/css">/* .demo {width: 200px;height: 200px;background: red;}.demo1{width: 200px;height: 200px;background: green;} */.addTransition-enter,.addTransition-leave-to {opacity: 0;}.addTransition-enter-active,.addTransition-leave-active {transition: opacity 2s;}.addTransition-enter-to,.addTransition-leave {opacity: 1;}</style></head><body><div id="root"><transition-group name="addTransition"><div v-for="list of lists" :key="list.age">姓名:{{list.name}}-----年齡:{{list.age}}</div></transition-group><button @click="handleClick">add</button></div></body><script type="text/javascript">var age = 0;var root = new Vue({el: '#root',data: {lists: [{name: '二狗子',age: 20}]},methods: {handleClick() {this.lists.push({name: '新同學',age: age++})}}})</script> </html>

動畫封裝

  • 前言
  • 如果部分效果在頁面里應用較多,可以對其進行動畫封裝,以方便日后調用
  • 步驟:
  • (1)首先創建基礎動畫,即簡單的顯隱切換動畫,如下所示
  • (2)封裝動畫組件
  • 這里使用了props傳值&&slot插槽
  • 3)調用組件
  • 組件內部為了響應slot插槽,所以需要填入對應DOM元素,同時傳入參數
  • 目前為止已經實現了對動畫的封裝,可以任意次調用,如下所示
  • (4)改良版—JS動畫
  • 動畫的封裝不僅可以使用CSS實現,同時也可以借助動畫鉤子,使用JS實現動畫效果。
  • 即將如下的CSS動畫代碼也封裝到組件里

<!DOCTYPE html> <html><head><meta charset="utf-8"><title>動畫封裝</title><script src="js/vue-2.6.9.min.js"></script><style type="text/css">.demo {width: 200px;height: 200px;background: red;}.demo1 {width: 200px;height: 200px;background: green;}.fade-enter,.fade-leave-to {opacity: 0;}.fade-enter-active,.fade-leave-active {transition: opacity 2s;}.fade-enter-to,.fade-leave {opacity: 1;}</style></head><body><div id="root"><fade :status="status"><div class="demo">我是展示內容1</div></fade><fade :status="status"><div class="demo1">我是展示內容2</div></fade><button @click="handleClick">toggle</button></div><script type="text/javascript">Vue.component('fade', {props: {status: Boolean},template: `<transition name="fade" model="out-in"><slot v-if="status"></slot></transition>`})var root = new Vue({el: '#root',data: {status: true},methods: {handleClick() {this.status = !this.status;}}})</script></body> </html>

以上就是Vue多元素過渡以及動畫封裝,如有問題請聯系小編!

總結

以上是生活随笔為你收集整理的VUE之多元素组件过渡+动画封装的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。