Vue3之使用js實(shí)現(xiàn)動畫示例解析
概述
動畫的實(shí)現(xiàn)其實(shí)不僅可以使用CSS的方式實(shí)現(xiàn),而且還可以使用js的方式實(shí)現(xiàn),二者有啥區(qū)別呢?CSS更加注重動畫的展現(xiàn),性能更好,而js的方式性能稍微差點(diǎn),但是可以在動畫執(zhí)行的每一個(gè)過程中做些額外的操作。也就是說動畫執(zhí)行的開始-執(zhí)行中-結(jié)束這個(gè)過程,如果使用CSS來做,最多也就是控制下動畫的屬性啥的,只是為了展示動畫。而使用js的方式,我們可以在動畫執(zhí)行開始時(shí),操作dom元素,加我們想要的效果啥的,動畫執(zhí)行結(jié)束時(shí)我們可以做一些動畫結(jié)束的操作,比如彈個(gè)對話框啥的。這些使用js實(shí)現(xiàn) 都會比較方便。
實(shí)例解析
假設(shè)我們要實(shí)現(xiàn)一個(gè)效果:讓“hello world”的字體顏色在紅色和綠色之間一秒改變一次,5秒后結(jié)束,然后結(jié)束后彈出一個(gè)對話框,展示一段內(nèi)容,代碼如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>使用JS實(shí)現(xiàn)動畫</title>
<script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div id="root"></div>
</body>
<script>
const app = Vue.createApp({
data() {
return {
show:false
}
},
methods: {
handleClick(){
this.show = !this.show;
},
handleBeforeEnter(el){
el.style.color = 'red';
},
handleEnterActive(el, done){
const animation = setInterval(() => {
const color = el.style.color;
if(color === 'red'){
el.style.color = 'green';
}else{
el.style.color = 'red';
}
},1000);
setTimeout(() =>{
clearInterval(animation);
done();// 通知下一個(gè)函數(shù)的執(zhí)行
},5000);
},
handleEnterEnd(){
alert(123);
}
},
template:
`
<transition
:css="false"
@before-enter="handleBeforeEnter"
@enter="handleEnterActive"
@after-enter="handleEnterEnd">
<div v-if="show" >hello world </div>
</transition>
<button @click="handleClick">switch</button>
`
});
const vm = app.mount('#root');
</script>
</html>
從上面的代碼中我們可以看到,在transition標(biāo)簽中我們使用了:css = "false" 這是因?yàn)槲覀円褂胘s做動畫,所以要先禁用掉css,然后分別實(shí)現(xiàn)了@before-enter="handleBeforeEnter", @enter="handleEnterActive" ,@after-enter 分別對應(yīng)動畫開始前,動畫執(zhí)行中,動畫執(zhí)行結(jié)束,而后面的handleBeforeEnter,handleEnterActive,handleEnterEnd三個(gè)函數(shù)是對應(yīng)三個(gè)階段的js函數(shù),我們可以在這幾個(gè)函數(shù)中執(zhí)行我們想要執(zhí)行的操作。在本例中:
handleBeforeEnter(el)
{
el.style.color = 'red';
}
動畫執(zhí)行前我們將文本的顏色設(shè)置成紅色
當(dāng)動畫執(zhí)行的時(shí)候
handleEnterActive(el, done){
const animation = setInterval(() => {
const color = el.style.color;
if(color === 'red'){
el.style.color = 'green';
}else{
el.style.color = 'red';
}
},1000);
setTimeout(() =>{
clearInterval(animation);
done();// 通知下一個(gè)函數(shù)的執(zhí)行
},5000);
}
動畫執(zhí)行的時(shí)候,我們隔1秒去判斷當(dāng)前文本的顏色,如果是紅色,則改成綠色,如果是綠色則改成紅色,然后持續(xù)5秒結(jié)束。
當(dāng)動畫結(jié)束的時(shí)候
handleEnterEnd(){
alert(123);
}
動畫結(jié)束后,會執(zhí)行handleEnterEnd,然后彈出一個(gè)對話框,顯示123.
總結(jié)
以上就是使用js實(shí)現(xiàn)動畫的內(nèi)容,本文只是簡單的介紹了使用js做動畫的基本知識,讀者可以去自己動手實(shí)踐一下,體會一下使用CSS和js實(shí)現(xiàn)的動畫的不同,并對比出他們使用的場景,然后歡迎大家在評論區(qū)交流,本文的目的也在于拋磚引玉,更多關(guān)于Vue3使用js實(shí)現(xiàn)動畫的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
你不知道的Vue技巧之--開發(fā)一個(gè)可以通過方法調(diào)用的組件(推薦)
這篇文章主要介紹了你不知道的Vue技巧之--開發(fā)一個(gè)可以通過方法調(diào)用的組件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
vue性能優(yōu)化之cdn引入vue-Router的問題
這篇文章主要介紹了vue性能優(yōu)化之cdn引入vue-Router的問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08
Vue中對比scoped css和css module的區(qū)別
這篇文章主要介紹了Vue中scoped css和css module的區(qū)別對比,scoped css可以直接在能跑起來的vue項(xiàng)目中使用而css module需要增加css-loader配置才能生效。具體內(nèi)容詳情大家參考下本文2018-05-05
Vue-Router實(shí)現(xiàn)組件間跳轉(zhuǎn)的三種方法
這篇文章主要為大家詳細(xì)介紹了Vue-Router來實(shí)現(xiàn)組件間跳轉(zhuǎn)的三種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
vue3+vite3+typescript實(shí)現(xiàn)驗(yàn)證碼功能及表單驗(yàn)證效果
這篇文章主要介紹了vue3+vite3+typescript實(shí)現(xiàn)驗(yàn)證碼功能及表單驗(yàn)證效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04

