<!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>