<!DOCTYPE html> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="stylesheet" type="text/css" href="./animate.css"> <script src="./vue.js"></script> <!-- <script src="http://cdn.staticfile.org/vue/2.6.10/vue.common.dev.js"></script> --> </head> <body> <div id="root"> //性能考慮,儘可能不用index做爲key值 <br> <div v-for="(item) of list" :key="item.id"> {{item.title}} </div> <button @click="handBtnClick">add</button> </div> <script type="text/javascript"> var count = 0; var vm = new Vue({ el: "#root", data: { list: [] }, methods: { handBtnClick: function() { this.list.push({ id: count++, title: "hello" }); } } }); </script> </body> </html>
以前是對單個或多個元素之間作切換動畫效果,如今,對一個列表過渡效果,用標籤<transition-group>:javascript
<!DOCTYPE html> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="stylesheet" type="text/css" href="./animate.css"> <script src="./vue.js"></script> <!-- <script src="http://cdn.staticfile.org/vue/2.6.10/vue.common.dev.js"></script> --> <style type="text/css"> /*由於沒有給它命名,因此用默認v開頭的class名*/ .v-enter, .v-leave-to { opacity: 0; } .v-enter-active, .v-leave-active { transition: opacity 1s; } </style> </head> <body> <div id="root"> //性能考慮,儘可能不用index做爲key值 <br> <transition-group> <div v-for="(item) of list" :key="item.id"> {{item.title}} </div> </transition-group> <button @click="handBtnClick">add</button> </div> <script type="text/javascript"> var count = 0; var vm = new Vue({ el: "#root", data: { list: [] }, methods: { handBtnClick: function() { this.list.push({ id: count++, title: "hello" }); } } }); </script> </body> </html>
爲啥上面的效果是增長的都有漸顯效果呢?css
用一對<transition-group>標籤包裹html
<transition-group>
<div>hello</div>vue
<div>hello</div>java
<div>hello</div>ide
</transition-group>性能
至關於每個都用一對<transition>標籤包裹動畫
<transition>ui
<div>hello</div>this
</transition>
<transition>
<div>hello</div>
</transition>
<transition>
<div>hello</div>
</transition>