清單動畫和狀態動畫都是增加使用者體驗的方法,當一個清單新增資料或移除資料時,如果直接加入,突然顯示,未免有些突兀,而且使用者可能會不知道此時已經有資料加入了,從清單中移除資料也是,使用者很有可能不知道目前已經移除了哪一條資料。有趣的動畫具有很好的吸引力,可以幫助使用者專注於新增和移除的數據,因此,加上動畫能夠改善使用者體驗。這就是清單動畫,而狀態動畫是指從一個狀態到另一個狀態的變化,如果直接變過去,就會顯得比較生硬,但是如果是加了動畫慢慢過渡過去會好很多。
#如上圖所示我們要展示一個數字構成的清單,右面有一個按鈕,點擊按鈕會執行一個動畫增加數字。程式碼如下:
<!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>列表动画</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將清單的動畫效果定義出來,這個效果和之前講的動畫定義差不多,這裡不過多贅述,定義好動畫後,我們在Vue的template中使用一個span將我們的數字清單顯示出來,然後最關鍵的是我們要使用<transition-group>
標籤將我們要做動畫的部分包裝起來。當我們點擊按鈕的時候,執行js函數往列表中新增一個列表長度加一的數。動畫效果讀者可以,運行查看。
狀態動畫比較簡單,就是從一個狀態到另一個狀態中間加上一些過渡的值,主要是透過資料控制內容的展示,例如從1變到10,如果直接1馬上變成10,則顯得很生硬,但是中間加一寫其他數字,比如2,3,4...最後再變成10就會好很多,代碼如下:
<!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>状态动画</title> <script src="https://unpkg.com/vue@next"></script> </head> <body> <div id="root"></div> </body> <script> // 状态动画:通过数据控制内容的展示 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>
列表動畫比較簡單,我們點擊執行按鈕的時候,使用js函數每隔100 毫秒就去修改一下目前顯示的值,直到值變成最終想要狀態的值就停止。
以上是Vue3列表動畫和狀態動畫怎麼應用的詳細內容。更多資訊請關注PHP中文網其他相關文章!