Vue <transition-group> 列表的 添加/删除元素 过渡案例

<!-- Vue <transition-group> 列表的 添加/删除元素 过渡案例 -->
<template>
  <div class="page">
    <button @click="add">add</button>
    <button @click="remove">remove</button>
    <!--
    <transition-group>以一个真实元素呈现,默认为span
    可以通过tag属性更换其他元素

    <transition-group>不可以用过渡模式mode

    transition-group>内部元素必须提供唯一的key属性

    css过渡的类将会应用在内部的元素中,例如下面的<span>
    -->
    <transition-group name="list" tag="p">
      <!--
      由items的改变引起的过渡效果
      -->
      <span v-for="item in items" :key="item" class="list-item">
      {{item}}
      </span>
    </transition-group>
  </div>
</template>

<script>
  export default {
    name: 'HelloWorld',
    data() {
      return {
        items: [1, 2, 3, 4, 5, 6, 7, 8, 9],
        nextNum: 10
      }
    },
    methods: {
      randomIndex() {
        // Math.floor(x) 返回小于等于x的最大整数
        // Math.ceil() 将数字向上舍入到最接近的整数
        return Math.floor(Math.random() * this.items.length); // 返回0-8的整数
      },
      add() {
        /*
        * splice()方法用于添加或删除数组中的元素
        *   第一个参数:数组下标,规定从何处开始添加或删除元素
        *   第二个参数:规定要删除多少元素
        *   第三个参数及其他参数:要添加到数组的新元素
        * */
        this.items.splice(this.randomIndex(), 0, this.nextNum++)
      },
      remove() {
        this.items.splice(this.randomIndex(), 1)
      }
    }
  }
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="less">
  .list-item {
    display: inline-block;
    margin-right: 10px;
  }

  /* 过渡效果的类名使用规则和<transition>一样 */
  .list-enter-active, .list-leave-active {
    transition: all 1s;
  }
  .list-enter, .list-leave-to {
    opacity: 0;
    transform: translateY(30px);
  }
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值