本例要结合过渡动画四个过程的示意图一起理解。
https://cn.vuejs.org/v2/guide/transitions.html
疑问:
v-for="(item,i) in list" del(i) 传参不传id,改成i ,这个是什么用法?
<style> li{ border: 1px dashed #999; margin: 5px; padding: 5px; line-height: 25px; font-size: 12px; width: 800px; } li:hover{ background-color: hotpink; transition: all 0.8s ease; } .v-enter,.v-leave-to { /* .v-enter, .v-leave-to 设置的过渡样式 自动赋给transition 或 transitiongroup标签了 */ opacity: 0; transform: translateY(80px); } .v-enter-active, .v-leave-active { /* .v-enter-active, .v-leave-active 设置的过渡样式 自动赋给transition 或 transitiongroup标签了 */ transition: all 0.6s ease; } .v-move{ transition: all 0.6s ease; } /* v-move 特性。会在元素的改变定位的过程中应用。 比如列表中有元素被删除,其他元素会上移 设置了v-move就会在这起作用. */ .v-leave-active{ position: absolute; /* 当元素设置了 absolute 后,默认就不是100%的宽度了,而是内容多宽就是多宽 所以要给li元素设置一下宽度. */ } /* 用splice删除数组的元素,由于删除的元素经历了一个过渡,始终占据文档流的这个位置, 因此下一个元素要等待其过渡消失后再移动过来,造成一个生硬的效果。 要达到平滑过渡,就要在删除元素leave-active阶段, 用position:absolute 让删除的元素脱离文档流,后面的元素才能同时平滑过渡过来。 */ </style> </head> <body> <div id="app"> ID:<input type="text" v-model="id"> NAME:<input type="text" v-model="name"> <input type="button" value="添加" @click="add()"> <!-- 通过 appear 特性设置节点的在初始渲染的过渡 也就是页面刚加载的时候,实现过渡动画 --> <transition-group tag="ul" appear> <li v-for="(item,i) in list" @click="del(i)" :key="item.id"> <!-- v-for="(item,i) in list" del(i) 传参不传id,改成i ??? 这个是什么用法--> {{item.id}} --- {{item.name}} </li> </transition-group> </div> <script> var vm = new Vue({ el:'#app', data:{ id:'', name:'', list:[ {id:1, name:'赵高'}, // list里用到的id name 等,要先定义在data {id:2, name:'秦桧'}, {id:3, name:'严嵩'}, {id:4, name:'魏忠贤'} ] }, methods:{ add(el){ this.list.push({id:this.id, name:this.name}); this.id = this.name = ''; }, del(i){ this.list.splice(i,1); // i 的用法?? }, }, }); </script> </body>