Vue 删除列表项的淡出动画

5 篇文章 0 订阅

使用vue前端框架尝试做一个购物车页面,勾选进购物车的商品列表可删除,代码如下:

**<template>部分**
<div class="goods-list-wrap">
  <transition-group name="list-complete">
    <div class="J-shoping-list" v-for="(item, index) in goodsList" :key="index">
      <img :src="item.img" />
      <div class="J-shoping-list-a">
        <p>{{item.price}}</p>
        <p>
        	<span class='goods-list-num'>{{item.num}}</span>
        	<span class='goods-list-price'>$ {{item.num * parseInt(item.price) || 0}}</span>
        </p>
      </div>
      <i class="el-icon-close goods-del-icon" @click="removeItem(item,index)"></i>
    </div>
  </transition-group>
</div>

**<script>部分**
data:function(){
	return {
		goodsList:[
	        {name: "apple", price: "5.00", num: "2", img: "/static/test/1.jpg"},
	        {name: "pear", price: "3.00", num: "1", img: "/static/test/2.jpg"},
	        {name: "grape", price: "7.90", num: "5", img: "/static/test/3.jpg"},
	        {name: "lemon", price: "2.50", num: "3", img: "/static/test/4.jpg"},
	        {name: "banan", price: "1.90", num: "7", img: "/static/test/5.jpg"},
	        {name: "cherry", price: "8.89", num: "2", img: "/static/test/6.jpeg"},
      ]
	}
},
methods:{
	removeItem(ele,idx) {
      this.goodsList.splice(idx, 1);
    },
}

**<style>部分(节选)**
.J-shoping-list {
  transition: all 1s;
}
.list-complete-enter, .list-complete-leave-to{
  opacity: 0;
  transform: translateY(30px);
}
.list-complete-leave-active {
  position: absolute;
}

代码部分完成之后,测试过程中出现了如下问题:

在这里插入图片描述
动画效果是有了,但是不管删除哪一项,动画都作用在最后一个列表项。
通过查阅资料,发现问题出在循环生成列表项时绑定的key值上,因为key是vue框架用来标识节点唯一性的,当使用index作为key值时,执行删除操作,删除之后的新数组index从1-6变为了1-5,此时,虚拟DOM认为列表项的最后一项需要应用动画效果。所以,改为选用其他属性作为key值,如name(本例中的name属性值无重复)。
<div class="J-shoping-list" v-for="(item, index) in goodsList" :key="index">
改为

<div class="J-shoping-list" v-for="(item, index) in goodsList" :key="item.name">

修改之后的动画效果为:
在这里插入图片描述
成功~撒花(_)∠※

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值