当前位置:首页 > VUE

vue实现列表过渡

2026-02-18 02:07:25VUE

使用 <transition-group> 实现列表过渡

Vue 提供了 <transition-group> 组件专门用于列表过渡效果,支持元素动态添加、删除或顺序变化时的动画。以下是一个基础实现示例:

vue实现列表过渡

<template>
  <div>
    <button @click="addItem">添加项目</button>
    <button @click="removeItem">删除项目</button>
    <transition-group name="list" tag="ul">
      <li v-for="item in items" :key="item.id">{{ item.text }}</li>
    </transition-group>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, text: '项目1' },
        { id: 2, text: '项目2' }
      ],
      nextId: 3
    }
  },
  methods: {
    addItem() {
      this.items.push({ id: this.nextId++, text: `项目${this.nextId}` })
    },
    removeItem() {
      this.items.pop()
    }
  }
}
</script>

<style>
.list-enter-active, .list-leave-active {
  transition: all 0.5s;
}
.list-enter, .list-leave-to {
  opacity: 0;
  transform: translateY(30px);
}
</style>

关键点说明

  • tag="ul" 指定渲染为 <ul> 元素,默认渲染为 <span>
  • 每个列表项必须设置唯一的 :key
  • name="list" 会生成对应的 CSS 类名前缀(如 list-enter-active
  • 使用 v-move 类处理列表位置变化的动画(需配合 position: absolute

进阶动画配置

可以通过 JavaScript 钩子实现更复杂的动画逻辑:

vue实现列表过渡

<transition-group
  @before-enter="beforeEnter"
  @enter="enter"
  @leave="leave"
>
  <!-- 列表项 -->
</transition-group>

methods: {
  beforeEnter(el) {
    el.style.opacity = 0
  },
  enter(el, done) {
    anime({
      targets: el,
      opacity: 1,
      translateY: 0,
      duration: 500,
      complete: done
    })
  }
}

排序动画优化

添加以下 CSS 可优化排序时的动画效果:

.list-move {
  transition: transform 0.5s;
}

第三方动画库集成

配合 animate.css 等库快速实现效果:

<transition-group
  enter-active-class="animate__animated animate__fadeInDown"
  leave-active-class="animate__animated animate__fadeOutUp"
>
  <!-- 列表项 -->
</transition-group>

注意:使用第三方动画库时需要先引入对应的 CSS 文件。

标签: 列表vue
分享给朋友:

相关文章

vue实现滚动截屏

vue实现滚动截屏

实现滚动截屏的基本思路 滚动截屏通常指对超出可视区域的长页面进行完整截图。在Vue中,可以通过结合DOM操作、Canvas绘制及第三方库实现。以下是具体方法: 使用html2canvas库实现 安装…

vue实现开关

vue实现开关

Vue 实现开关组件的方法 使用原生HTML和Vue数据绑定 通过v-model绑定复选框的checked状态,结合CSS样式实现开关效果: <template> <label…

vue 实现loading

vue 实现loading

Vue 实现 Loading 的方法 使用 v-if 和 v-show 控制显示 在 Vue 中可以通过 v-if 或 v-show 控制 loading 组件的显示与隐藏。v-if 会动态创建或销毁…

js 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.define…

vue实现模糊

vue实现模糊

Vue实现模糊搜索的方法 在Vue中实现模糊搜索功能通常需要结合输入框和列表渲染,通过监听输入内容动态过滤数据。以下是几种常见实现方式: 使用计算属性实现 计算属性适合处理需要响应式更新的搜索逻辑:…

vue实现抽屉

vue实现抽屉

Vue 实现抽屉组件 抽屉组件是一种常见的 UI 模式,通常用于从屏幕边缘滑出内容。以下是几种实现抽屉的方法: 使用 Vue 原生实现 创建一个基本的抽屉组件,利用 Vue 的过渡和条件渲染功能。…