详解Vue学习笔记进阶篇之列表过渡及其他

2020-06-12 21:26:18易采站长站整理
move-class 
属性手动设置。

v-move
对于设置过渡的切换时机和过渡曲线非常有用,你会看到如下的例子:


<div id="app2">
<button @click="shuffle">Shuffle</button>
<transition-group name="flip-list" tag="ul">
<li v-for="item in items" :key="item">
{{item}}
</li>
</transition-group>
</div>


.flip-list-move {
transition: transform 1s;
}


var app2 = new Vue({
el:'#app2',
data:{
items:[1,2,3,4,5,6,7,8,9] },
methods:{
shuffle:function () {
this.items = _.shuffle(this.items)
}
}
})

这个例子需要添加以下引用


<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.14.1/lodash.min.js"></script>

运行结果:

这个看起来很神奇,内部的实现,Vue 使用了一个叫 FLIP 简单的动画队列

使用 transforms 将元素从之前的位置平滑过渡新的位置。

我们将之前实现的例子和这个技术结合,使我们列表的一切变动都会有动画过渡。


<div id="app3" class="demo">
<button @click="shuffle">Shuffle</button>
<button @click="add">Add</button>
<button @click="remove">Remove</button>
<transition-group name="list-complete" tag="p">
<span v-for="item in items" :key="item" class="list-complete-item">
{{item}}
</span>
</transition-group>
</div>


.list-complete-item{
transition: all 1s;
display: inline-block;
margin-right: 10px;
}
.list-complete-enter, .list-complete-leave-to{
opacity: 0;
transform: translateY(30px);
}
.list-complete-leave-active{
position: absolute;
}


var app3 = new Vue({
el:'#app3',
data:{
items:[1,2,3,4,5,6,7,8,9],
nextNum:10
},
methods:{
shuffle:function () {
this.items = _.shuffle(this.items)
},
randomIndex:function () {
return Math.floor(Math.random() * this.items.length)
},
add:function () {
this.items.splice(this.randomIndex(), 0, this.nextNum++)
},
remove:function () {
this.items.splice(this.randomIndex(), 1)
}
}
})

运行结果: