transition-group列表过渡

之前使用<transition>组件内部只用有一个元素,那么怎么同时渲染整个列表,比如使用 v-for?在这种场景中,需要使用 <transition-group> 组件,关于这个组件有几个特点:

①不同于 <transition>,它会以一个真实元素呈现:默认为一个 <span>。也可以通过 tag属性更换为其他元素。

②过渡模式不可用,因为我们不再相互切换特有的元素。

③内部元素必须要提供唯一的key属性值。

④CSS过渡的类将会应用在内部的元素中,而不是这个组/容器本身。

<style>
    .list-item {
        display: inline-block;
        margin-right: 10px;
    }
    /*进入过渡生效时的状态和离开过渡生效时的状态*/
    .list-enter-active, .list-leave-active {
        transition: all 1s;
    }
    /*进入过渡时的开始状态和离开过渡时的结束状态*/
    .list-enter, .list-leave-to {
        opacity: 0;
        transform: translateY(30px);
    }
</style>
let APPComponent={
        template:`
           <div>
                <button v-on:click="add">Add</button>
                <button v-on:click="remove">Remove</button>
                <transition-group name="list" tag="p">
                    <span v-for="item in items" v-bind:key="item" class="list-item">
                      {{ item }}
                    </span>
                </transition-group>
           </div>
        `,
        data(){
            return {
                items: [1,2,3,4,5,6,7,8,9],
                nextNum: 10
            }
        },
       methods:{
            //随机数
            randomIndex: function () {
                return Math.floor(Math.random() * this.items.length)
            },
            //在this.items数组内随机位置插入一条数据
            add: function () {
                this.items.splice(this.randomIndex(), 0, this.nextNum++)
            },
            //在this.items数组内随机位置删除一条数据
            remove: function () {
                this.items.splice(this.randomIndex(), 1)
            }
        }
    };

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
上次更新: 2022/06/01 11:01:52
最近更新
01
关于我
07-14
02
科学上网
11-15
03
OSS+CDN
09-23
更多文章>
极昼青春
买辣椒也用券