Vue.js 是一個 MVVM 模式的前端框架,同時具備相當強大的特性。其中,Vue Animation 借助了 Vue 對 DOM 操作的封裝,實現了便捷的動畫效果。
實現 Vue Animation 的主要有兩個 API,分別是 transition 和 transition-group。其中 transition 是對單元素的動畫效果進行操作;而 transition-group 則是對多個元素同時進行動畫效果的操作。
<template> <transition name="fade"> <p v-if="show">Hello, World!</p> </transition> </template> <script> export default { data() { return { show: true }; } }; </script> <style> .fade-enter-active, .fade-leave-active { transition: opacity .3s; } .fade-enter, .fade-leave-to { opacity: 0; } </style>
上述代碼使用了 transition API 對一個 p 元素添加了淡入淡出的動畫效果。其中,name 屬性決定了過渡效果的類名,而在樣式中定義的 fade-enter-active、fade-leave-active、fade-enter 和 fade-leave-to 則決定了實際的動畫效果。
<template> <transition-group name="list"> <div v-for="(item, index) in list" :key="item.id"> {{ item.content }} </div> </transition-group> </template> <script> export default { data() { return { list: [ { id: 1, content: "item1" }, { id: 2, content: "item2" }, { id: 3, content: "item3" } ] }; }, methods: { addItem() { this.list.push({ id: Date.now(), content: "new item" }); }, removeItem(index) { this.list.splice(index, 1); } } }; </script> <style> .list-enter-active, .list-leave-active { transition: all .3s; } .list-enter, .list-leave-to { opacity: 0; transform: translateY(30px); } </style>
而上述代碼則使用了 transition-group 對一個 div 元素數組進行了進場/退場的動畫效果。在代碼中,name 屬性依然決定了過渡效果的類名,而在樣式中定義的 list-enter-active、list-leave-active、list-enter 和 list-leave-to 則決定了實際的動畫效果。此外,此代碼還用到了 Vue 中的 key 屬性以及相應的添加刪除函數。