本篇內容主要講解“vue巧用過渡效果的方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“vue巧用過渡效果的方法”吧!
創(chuàng)新互聯(lián)建站主要從事網站設計制作、網站建設、網頁設計、企業(yè)做網站、公司建網站等業(yè)務。立足成都服務阜平,十多年網站建設經驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:18982081108
概念
在進入/離開的過渡中, 會有6個class的切換, 抄一張官方的圖
v-enter:定義進入過渡的開始狀態(tài)。在元素被插入之前生效,在元素被插入之后的下一幀移除。
v-enter-active:定義進入過渡生效時的狀態(tài)。在整個進入過渡的階段中應用,在元素被插入之前生效,在過渡/動畫完成之后移除。這個類可以被用來定義進入過渡的過程時間,延遲和曲線函數(shù)。
v-enter-to: 2.1.8版及以上 定義進入過渡的結束狀態(tài)。在元素被插入之后下一幀生效 (與此同時 v-enter 被移除),在過渡/動畫完成之后移除。
v-leave: 定義離開過渡的開始狀態(tài)。在離開過渡被觸發(fā)時立刻生效,下一幀被移除。
v-leave-active:定義離開過渡生效時的狀態(tài)。在整個離開過渡的階段中應用,在離開過渡被觸發(fā)時立刻生效,在過渡/動畫完成之后移除。這個類可以被用來定義離開過渡的過程時間,延遲和曲線函數(shù)。
v-leave-to: 2.1.8版及以上 定義離開過渡的結束狀態(tài)。在離開過渡被觸發(fā)之后下一幀生效 (與此同時 v-leave 被刪除),在過渡/動畫完成之后移除。
看起來還是有有點亂,先來捋一下。
enter 定義開始的狀態(tài), active定義過程, enter定義結束, 但是在實際進行的時候是有交叉的。 通過斷點可以發(fā)現(xiàn),
添加v-enter
添加v-enter-active,
卸載v-enter
添加v-ernter-to
卸載v-enter-to和v-enter-active
// transition: all 2s; .move-enter { margin-left: 0; } .move-enter-active { margin-left: 100px; } .move-enter-to { margin-left: 200px; }
例如在上面這種情況下, 過渡動畫會怎么進行呢?
這里要注意兩點。
enter-active覆蓋掉了enter的起點位置
一共經過了兩次過渡, enter-to是在active結束之后開始的, 所以第四秒, 才回到dom元素本身的位置。
所以官方文檔之, 也是使用v-enter定義起點位置, 在enter-active中控制效果。
利用class實現(xiàn)過渡效果
在這6個class之上, 利用transition或者動畫, 都可以實現(xiàn)我們需要的效果。 舉個栗子, 這里我們直接將所有的路由改變都定義一個過渡效果,
appear屬性表示頁面初次加載的時候也適用于動畫
@keyframes animationIn { 0% { transform: translate(-100%, 0); } 100% { transform: translate(0, 0); } } @keyframes animationOut { 0% { transform: translate(0, 0); } 100% { transform: translate(100%, 0); } } .move-enter { transform: translate(-100%, 0); position: absolute!important; z-index: 999; top: 0; left: 0; width: 100%; } .move-enter-active { animation: animationIn 0.2s; position: absolute!important; // 進入的組件要覆蓋掉移除的組件,參考 //https://cn.vuejs.org/v2/guide/transitions.html#%E8%BF%87%E6%B8%A1%E6%A8%A1%E5%BC%8F z-index: 999; top: 0; left: 0; width: 100%; } .move-leave { transform: translate(0, 0); } .move-leave-active { animation: animationOut 0.2s; }
效果
JavaScript 鉤子
這些鉤子函數(shù)可以結合 CSS transitions/animations 使用
在這些鉤子中, 可以使用其他第三方庫,回調中的el將是真實的dom元素 舉個栗子, 這里使用了官方推薦的Velocity.js作為動畫庫
methods: { start() { this.show = !this.show }, handleBeforeEnter: function (el) { el.style.opacity = 0; console.log('方塊顯示動畫即將執(zhí)行'); }, handleEnter: function (el, done) { Velocity(el, 'stop'); Velocity(el, { backgroundColor: '#0085eb', opacity: 1, translateX: 260, rotateZ: ['360deg', 0] }, { duration: 1000, easing: [ 0.4, 0.01, 0.165, 0.99 ], complete: done }); console.log('方塊顯示動畫執(zhí)行中...'); }, handleAfterEnter: function (el) { console.log('方塊顯示動畫結束'); }, handleBeforeLeave: function (el) { console.log('方塊隱藏動畫即將執(zhí)行'); }, handleLeave: function (el, done) { Velocity(el, 'stop'); Velocity(el, { backgroundColor: '#4dd0e1', opacity: 0, translateX: 0, rotateZ: [0, '360deg'] }, { duration: 1000, easing: [ 0.4, 0.01, 0.165, 0.99 ], complete: done }); console.log('方塊隱藏動畫執(zhí)行中...'); }, handleAfterLeave: function (el) { console.log('方塊隱藏動畫結束'); } }
列表過渡
vue還提供了transition-group組件, 作為列表過渡的容器
不同于 ,它會以一個真實元素呈現(xiàn):默認為一個 。你也可以通過 tag 特性更換為其他元素
transition-group 擁特別的v-move屬性,它會在元素的改變定位的過程中應用, 效果可參見官網。
其他的就不抄官網了
列表過渡中, 可以結合js鉤子, 實現(xiàn)一些特殊的效果
舉個栗子
添加排序// 這里的data-index 是一個識別標識, 便于在js鉤子中獲得當前元素的序號 {{i}}
@keyframes animat { 0% { margin-left: 300px; opacity: 0; } 100% { margin-left: 0; opacity: 1; } } .fade-enter { opacity: 0; margin-left: 300px; } .fade-enter-active { opacity: 0; animation: animat 1s; } .fade-enter-to { opacity: 1; margin-left: 0; } .fade-move { transition: all 0.3s; } .fade-leave { left: 10px; } .fade-leave-active { transition: all 2s ease-out; } .fade-leave-to { left: -100%; }
效果
到此,相信大家對“vue巧用過渡效果的方法”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!