Vue中JS動畫與Velocity.js的結(jié)合使用
前面學(xué)習(xí)了用css實現(xiàn)動畫效果,那 Vue 中能不能用js實現(xiàn)動畫效果呢?
其實 Vue 提供了很多動畫鉤子
enter
入場動畫鉤子函數(shù)有before-enter、enter、after-enter
before-enter
動畫出現(xiàn)前的事件
<div id="root"> <transition name="fade" @before-enter="handleBeforeEnter" //動畫出現(xiàn)前的事件 > <div v-if="show">hello world</div> </transition> <button @click="handleClick">切換</button> </div> let vm = new Vue({ el: '#root', data: { show:true }, methods: { handleClick(){ this.show = !this.show }, handleBeforeEnter(el){ //接收一個參數(shù) el,為 dom 元素 el.style.color = 'red' } } })
enter
before-enter事件結(jié)束后執(zhí)行
<div id="root"> <transition name="fade" @before-enter="handleBeforeEnter" @enter="handleEnter" //before-enter 事件結(jié)束后執(zhí)行 > <div v-if="show">hello world</div> </transition> <button @click="handleClick">切換</button> </div> let vm = new Vue({ el: '#root', data: { show:true }, methods: { handleClick(){ this.show = !this.show }, handleBeforeEnter(el){ el.style.color = 'red' } handleEnter(el,done){ //接收兩個參數(shù),第一個參數(shù) el 為 dom 元素,第二個參數(shù)是 done 是個回調(diào)函數(shù) setTimeout(()=>{ el.style.color = 'green' done() //done 回調(diào)函數(shù)非常重要,在執(zhí)行完動畫后需手動執(zhí)行下這個函數(shù),相當(dāng)于告訴 Vue 這個動畫已經(jīng)執(zhí)行完了,會再去調(diào)用 after-enter 事件 },2000) } } })
after-enter
enter事件中done被調(diào)用后,after-enter事件會被觸發(fā)
<div id="root"> <transition name="fade" @before-enter="handleBeforeEnter" @enter="handleEnter" @after-enter="handleAfterEnter" //enter 事件中 done 被調(diào)用后,after-enter 事件會被觸發(fā) > <div v-if="show">hello world</div> </transition> <button @click="handleClick">切換</button> </div> let vm = new Vue({ el: '#root', data: { show: true }, methods: { handleClick() { this.show = !this.show }, handleBeforeEnter(el) { el.style.color = 'red' }, handleEnter(el, done) { setTimeout(() => { el.style.color = 'green' done() }, 2000) }, handleAfterEnter(el) { //接收一個參數(shù) el,為 dom 元素 setTimeout(()=>{ el.style.color = 'blue' },2000) } } })
leave
與入場動畫對應(yīng)的出場動畫鉤子函數(shù)有before-leave、leave、after-leave。它們的用法與入場動畫用法一樣
Velocity.js庫
有了上面基礎(chǔ)后,配合Velocity.js庫,能實現(xiàn)更強大的動畫效果。
<div id="root"> <transition name="fade" @before-enter="handleBeforeEnter" @enter="handleEnter" @after-enter="handleAfterEnter" //enter 事件中 done 被調(diào)用后,after-enter 事件會被觸發(fā) > <div v-if="show">hello world</div> </transition> <button @click="handleClick">切換</button> </div> let vm = new Vue({ el: '#root', data: { show: true }, methods: { handleClick() { this.show = !this.show }, handleBeforeEnter(el) { el.style.opacity = 0 }, handleEnter(el, done) { Velocity(el, { //第一個參數(shù)是要操作的 dom 元素 opacity: 1 }, { duration: 1000, //第三參數(shù)中需要配置一個 complete 屬性,值為 done,因為 Velocity 執(zhí)行完后會自動執(zhí)行 complete 屬性,這里設(shè)置為 done 是讓它去觸發(fā) after-enter 事件 complete: done }) }, handleAfterEnter(el) { console.log('動畫結(jié)束') } } })
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue3使用wangeditor封裝和自定義上傳文件官方教程
這篇文章主要為大家介紹了vue3使用wangeditor封裝和自定義上傳文件的官方教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪<BR>2023-06-06Vue點擊在彈窗外部實現(xiàn)一鍵關(guān)閉的示例代碼
在Vue應(yīng)用中,彈窗是一個常見的交互元素,有時我們可能希望用戶點擊彈窗外部時,彈窗能夠自動關(guān)閉,本文主要介紹了Vue點擊在彈窗外部實現(xiàn)一鍵關(guān)閉的示例代碼,感興趣的可以了解一下2024-06-06vue使用recorder-core.js實現(xiàn)錄音功能
這篇文章主要介紹了vue如何使用recorder-core.js實現(xiàn)錄音功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07