Vue的Transition组件子元素动画没反应怎么办?
在用Vue的v-for循环列表时,给transition组件设置了name和mode,但删除元素时只有第一个元素有动画,其他子元素直接消失,这是为啥啊?
代码是这样的:
<transition-group name="list" tag="ul">
<li v-for="item in items" :key="item.id">{{ item.text }}</li>
</transition-group>
CSS写了.list-enter-active和.list-leave-active,连transition属性都设置了,但开发者工具显示其他元素根本没有过渡样式,只有第一个元素生效了,这到底是哪里出问题了?
你的代码现在只写了 .list-enter-active 和 .list-leave-active,但漏了 enter-from/leave-to 这些初始状态,而且最关键的是:li 元素本身没有设置 key 和独立的包裹结构来支撑逐个动画。
我的做法是把每个 li 包一层 transition,或者更简单点 —— 直接在 transition-group 里确保每个子项都有正确的类名过渡体系。比如这样改:
然后 CSS 要补全所有阶段:
还有一点容易忽略:必须给每个 li 加唯一的 :key,你虽然加了,但确认下 item.id 真的是唯一且稳定不变的?如果 id 是索引或者会变的,Vue 就没法追踪元素,动画也会错乱。
最后检查浏览器开发者工具里的元素样式,在删除时看看其他 li 有没有加上 list-leave-active 这种类名,如果没有,说明 transition-group 没正确触发每个节点的生命周期,大概率就是 key 不对或者结构问题。
试试看,一般补上 enter-from 和 leave-to 就好了。