vue实现列表过渡
使用 Vue 的 <transition-group> 实现列表过渡
Vue 提供了 <transition-group> 组件专门用于列表过渡效果。与 <transition> 不同,它能够为列表中的每个元素添加过渡效果,同时在元素位置变化时提供平滑的动画。
基本用法示例:

<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: all 0.5s ease;
}
.list-enter, .list-leave-to {
opacity: 0;
transform: translateY(30px);
}
列表排序过渡效果
当列表元素位置变化时,可以通过 v-move 类实现平滑移动效果。需要在 CSS 中添加以下样式:

.list-move {
transition: transform 0.5s ease;
}
使用 JavaScript 钩子实现复杂动画
对于更复杂的动画效果,可以使用 JavaScript 钩子:
<transition-group
@before-enter="beforeEnter"
@enter="enter"
@leave="leave"
tag="ul"
>
<li v-for="item in items" :key="item.id">
{{ item.text }}
</li>
</transition-group>
methods: {
beforeEnter(el) {
el.style.opacity = 0
el.style.transform = 'translateY(30px)'
},
enter(el, done) {
Velocity(el,
{ opacity: 1, translateY: '0' },
{ duration: 500, complete: done }
)
},
leave(el, done) {
Velocity(el,
{ opacity: 0, translateY: '30px' },
{ duration: 500, complete: done }
)
}
}
注意事项
- 必须为列表中的每个元素设置唯一的
key属性 - 默认渲染为
<span>标签,可以通过tag属性指定其他标签 - 对于大量数据的列表过渡,考虑使用
appear属性控制初始渲染动画
与第三方动画库结合
可以轻松结合 Animate.css 等第三方动画库:
<transition-group
name="custom-classes-transition"
enter-active-class="animate__animated animate__fadeInUp"
leave-active-class="animate__animated animate__fadeOutDown"
tag="div"
>
<div v-for="item in items" :key="item.id">
{{ item.text }}
</div>
</transition-group>
性能优化技巧
- 对于复杂列表,使用
v-if替代v-show减少 DOM 操作 - 避免同时过渡太多元素
- 考虑使用
requestAnimationFrame优化动画性能 - 对于移动端,使用
will-changeCSS 属性提升性能






