Vue3之列表動(dòng)畫(huà)和狀態(tài)動(dòng)畫(huà)示例詳解
概述
列表動(dòng)畫(huà)和狀態(tài)動(dòng)畫(huà)都是增加用戶體驗(yàn)的方法,當(dāng)一個(gè)列表添加數(shù)據(jù)或者移除數(shù)據(jù)時(shí),如果直接添加,突然顯示,未免有些突兀,而且用戶可能會(huì)不知道此時(shí)已經(jīng)有數(shù)據(jù)加入了,從列表中移除數(shù)據(jù)也是,用戶很有可能不知道當(dāng)前已經(jīng)移除了哪一條數(shù)據(jù)。但是如果加上動(dòng)畫(huà)就會(huì)好很多了,有趣的動(dòng)畫(huà)可以吸引用戶的注意力,讓用戶關(guān)注新增和移除的數(shù)據(jù)。這就是列表動(dòng)畫(huà),而狀態(tài)動(dòng)畫(huà)是指從一個(gè)狀態(tài)到另一個(gè)狀態(tài)的變化,如果直接變過(guò)去,就會(huì)顯得比較生硬,但是如果是加了動(dòng)畫(huà)慢慢過(guò)渡過(guò)去會(huì)好很多。
示例解析
列表動(dòng)畫(huà)
如上圖所示我們要展示一個(gè)數(shù)字構(gòu)成的列表,右面有一個(gè)按鈕,點(diǎn)擊按鈕會(huì)執(zhí)行一個(gè)動(dòng)畫(huà)增加數(shù)字。代碼如下:
<!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>列表動(dòng)畫(huà)</title> <style> .list-item{ display: inline-block; margin-right: 10px; } .v-enter-from{ opacity: 0; transform: translateY(30px); } .v-enter-active{ transition: all 1s ease-in; } .v-enter-to{ opacity: 1; transform: translateY(0px); } .v-move{ transition: 2.5s ease-in; } </style> <script src="https://unpkg.com/vue@next"></script> </head> <body> <div id="root"></div> </body> <script> const app = Vue.createApp({ data() { return { list:[1,2,3] } }, methods: { handleClick(){ this.list.unshift(this.list.length+1); } }, template: ` <div> <transition-group> <span class="list-item" v-for = "item in list" :key="item">{{item}}</span> </transition-group> <button @click="handleClick">add</button> </div> ` }); const vm = app.mount('#root'); </script>
我們先是使用CSS將列表的動(dòng)畫(huà)效果定義出來(lái),這個(gè)效果和之前講的動(dòng)畫(huà)定義差不多,這里不過(guò)多贅述,定義好動(dòng)畫(huà)后,我們?cè)赩ue的template中使用一個(gè)span將我們的數(shù)字列表顯示出來(lái),然后最關(guān)鍵的是我們要使用 <transition-group>
標(biāo)簽將我們要做動(dòng)畫(huà)的部分包裹起來(lái)。當(dāng)我們點(diǎn)擊按鈕的時(shí)候,執(zhí)行js函數(shù)往列表中新增一個(gè)列表長(zhǎng)度加一的數(shù)。動(dòng)畫(huà)效果讀者可以,運(yùn)行查看。
狀態(tài)動(dòng)畫(huà)
狀態(tài)動(dòng)畫(huà)比較簡(jiǎn)單,就是從一個(gè)狀態(tài)到另一個(gè)狀態(tài)中間加一些過(guò)渡的值,主要是通過(guò)數(shù)據(jù)控制內(nèi)容的展示,比如從1變到10,如果直接1馬上變成10,則顯得很生硬,但是中間加一寫(xiě)其他數(shù)字,比如2,3,4...最后再變成10就會(huì)好很多,代碼如下:
<!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>狀態(tài)動(dòng)畫(huà)</title> <script src="https://unpkg.com/vue@next"></script> </head> <body> <div id="root"></div> </body> <script> // 狀態(tài)動(dòng)畫(huà):通過(guò)數(shù)據(jù)控制內(nèi)容的展示 const app = Vue.createApp({ data() { return { number:1, animateNumber: 1 } }, methods: { handleClick(){ this.number =10; if(this.animateNumber<this.number){ const animation = setInterval(()=>{ this.animateNumber += 1; if(this.animateNumber === 10){ clearInterval(animation) } },100); } } }, template: ` <div> <div>{{animateNumber}}</div> <button @click="handleClick">do</button> </div> ` }); const vm = app.mount('#root'); </script>
列表動(dòng)畫(huà)比較簡(jiǎn)單,我們點(diǎn)擊執(zhí)行按鈕的時(shí)候,使用js函數(shù)每隔100 毫秒就去修改一下當(dāng)前顯示的值,直到值變成最終想要狀態(tài)的值就停止。
總結(jié)
列表動(dòng)畫(huà)和狀態(tài)動(dòng)畫(huà)都是為了增強(qiáng)用戶體驗(yàn),列表動(dòng)畫(huà)主要是在列表中的數(shù)據(jù)變化的時(shí)候執(zhí)行的,而狀態(tài)動(dòng)畫(huà)主要是當(dāng)一個(gè)狀態(tài)更換到零一個(gè)狀態(tài)的時(shí)候執(zhí)行,列表動(dòng)畫(huà)通過(guò)vue提供的<transition-group>
標(biāo)簽包裹需要執(zhí)行動(dòng)畫(huà)的部分實(shí)現(xiàn),而列表動(dòng)畫(huà)通過(guò)控制數(shù)據(jù)內(nèi)容的展示實(shí)現(xiàn),本文介紹的都是簡(jiǎn)單的動(dòng)畫(huà)效果,讀者若需要實(shí)現(xiàn)更炫麗的動(dòng)畫(huà)效果,請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
vue+canvas實(shí)現(xiàn)炫酷時(shí)鐘效果的倒計(jì)時(shí)插件(已發(fā)布到npm的vue2插件,開(kāi)箱即用)
這篇文章主要介紹了vue+canvas實(shí)現(xiàn)炫酷時(shí)鐘效果的倒計(jì)時(shí)插件(已發(fā)布到npm的vue2插件,開(kāi)箱即用) ,需要的朋友可以參考下2018-11-11vue子組件created方法不執(zhí)行問(wèn)題及解決
這篇文章主要介紹了vue子組件created方法不執(zhí)行問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10Vue3.0數(shù)據(jù)響應(yīng)式原理詳解
這篇文章主要介紹了Vue3.0數(shù)據(jù)響應(yīng)式原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10vue通過(guò)定時(shí)器實(shí)現(xiàn)垂直滾動(dòng)公告
這篇文章主要為大家詳細(xì)介紹了vue通過(guò)定時(shí)器實(shí)現(xiàn)垂直滾動(dòng)公告,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04使用vue實(shí)現(xiàn)grid-layout功能實(shí)例代碼
這篇文章主要介紹了使用vue實(shí)現(xiàn)grid-layout功能的代碼講解,需要的朋友可以參考下2018-01-01