Vue中JS動(dòng)畫與Velocity.js的結(jié)合使用
前面學(xué)習(xí)了用css實(shí)現(xiàn)動(dòng)畫效果,那 Vue 中能不能用js實(shí)現(xiàn)動(dòng)畫效果呢?
其實(shí) Vue 提供了很多動(dòng)畫鉤子
enter
入場(chǎng)動(dòng)畫鉤子函數(shù)有before-enter、enter、after-enter
before-enter
動(dòng)畫出現(xiàn)前的事件
<div id="root">
<transition name="fade"
@before-enter="handleBeforeEnter" //動(dòng)畫出現(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){ //接收一個(gè)參數(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){ //接收兩個(gè)參數(shù),第一個(gè)參數(shù) el 為 dom 元素,第二個(gè)參數(shù)是 done 是個(gè)回調(diào)函數(shù)
setTimeout(()=>{
el.style.color = 'green'
done() //done 回調(diào)函數(shù)非常重要,在執(zhí)行完動(dòng)畫后需手動(dòng)執(zhí)行下這個(gè)函數(shù),相當(dāng)于告訴 Vue 這個(gè)動(dòng)畫已經(jīng)執(zhí)行完了,會(huì)再去調(diào)用 after-enter 事件
},2000)
}
}
})
after-enter
enter事件中done被調(diào)用后,after-enter事件會(huì)被觸發(fā)
<div id="root">
<transition name="fade"
@before-enter="handleBeforeEnter"
@enter="handleEnter"
@after-enter="handleAfterEnter" //enter 事件中 done 被調(diào)用后,after-enter 事件會(huì)被觸發(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) { //接收一個(gè)參數(shù) el,為 dom 元素
setTimeout(()=>{
el.style.color = 'blue'
},2000)
}
}
})
leave
與入場(chǎng)動(dòng)畫對(duì)應(yīng)的出場(chǎng)動(dòng)畫鉤子函數(shù)有before-leave、leave、after-leave。它們的用法與入場(chǎng)動(dòng)畫用法一樣
Velocity.js庫
有了上面基礎(chǔ)后,配合Velocity.js庫,能實(shí)現(xiàn)更強(qiáng)大的動(dòng)畫效果。
<div id="root">
<transition name="fade"
@before-enter="handleBeforeEnter"
@enter="handleEnter"
@after-enter="handleAfterEnter" //enter 事件中 done 被調(diào)用后,after-enter 事件會(huì)被觸發(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, { //第一個(gè)參數(shù)是要操作的 dom 元素
opacity: 1
}, {
duration: 1000, //第三參數(shù)中需要配置一個(gè) complete 屬性,值為 done,因?yàn)?Velocity 執(zhí)行完后會(huì)自動(dòng)執(zhí)行 complete 屬性,這里設(shè)置為 done 是讓它去觸發(fā) after-enter 事件
complete: done
})
},
handleAfterEnter(el) {
console.log('動(dòng)畫結(jié)束')
}
}
})
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue3使用wangeditor封裝和自定義上傳文件官方教程
這篇文章主要為大家介紹了vue3使用wangeditor封裝和自定義上傳文件的官方教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2023-06-06
Vue點(diǎn)擊在彈窗外部實(shí)現(xiàn)一鍵關(guān)閉的示例代碼
在Vue應(yīng)用中,彈窗是一個(gè)常見的交互元素,有時(shí)我們可能希望用戶點(diǎn)擊彈窗外部時(shí),彈窗能夠自動(dòng)關(guān)閉,本文主要介紹了Vue點(diǎn)擊在彈窗外部實(shí)現(xiàn)一鍵關(guān)閉的示例代碼,感興趣的可以了解一下2024-06-06
vue中數(shù)據(jù)請(qǐng)求axios的封裝和使用
這篇文章主要介紹了vue中數(shù)據(jù)請(qǐng)求axios的封裝和使用,Axios?是一個(gè)基于?promise?的?HTTP?庫,下面文章圍繞主題的相關(guān)資料展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-04-04
vue使用recorder-core.js實(shí)現(xiàn)錄音功能
這篇文章主要介紹了vue如何使用recorder-core.js實(shí)現(xiàn)錄音功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
Vue實(shí)現(xiàn)調(diào)用PC端攝像頭實(shí)時(shí)拍照
這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)調(diào)用PC端攝像頭實(shí)時(shí)拍照,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
layui實(shí)際項(xiàng)目使用過程中遇到的兼容性問題及解決
這篇文章主要介紹了layui實(shí)際項(xiàng)目使用過程中遇到的兼容性問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04

