当前位置:首页 > VUE

vue列表展开实现

2026-02-18 05:22:01VUE

Vue列表展开实现方法

使用v-if控制显示隐藏

通过v-if指令动态控制列表项的显示与隐藏,结合点击事件切换状态。

<template>
  <div>
    <button @click="toggleList">展开/收起列表</button>
    <ul v-if="isExpanded">
      <li v-for="item in items" :key="item.id">{{ item.name }}</li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isExpanded: false,
      items: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' }
      ]
    }
  },
  methods: {
    toggleList() {
      this.isExpanded = !this.isExpanded
    }
  }
}
</script>

使用transition添加动画效果

为展开收起过程添加平滑的过渡动画。

vue列表展开实现

<template>
  <div>
    <button @click="toggleList">展开/收起</button>
    <transition name="fade">
      <ul v-if="isExpanded">
        <li v-for="item in items" :key="item.id">{{ item.name }}</li>
      </ul>
    </transition>
  </div>
</template>

<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
}
</style>

动态高度过渡

通过max-height实现高度变化的过渡效果。

vue列表展开实现

<template>
  <div>
    <button @click="toggleList">展开/收起</button>
    <div class="list-container" :style="{ maxHeight: isExpanded ? '500px' : '0' }">
      <ul>
        <li v-for="item in items" :key="item.id">{{ item.name }}</li>
      </ul>
    </div>
  </div>
</template>

<style>
.list-container {
  overflow: hidden;
  transition: max-height 0.3s ease-out;
}
</style>

使用第三方组件

对于更复杂的需求,可以使用现成的UI组件库如Element UI的Collapse组件。

<template>
  <el-collapse v-model="activeNames">
    <el-collapse-item title="列表标题" name="1">
      <ul>
        <li v-for="item in items" :key="item.id">{{ item.name }}</li>
      </ul>
    </el-collapse-item>
  </el-collapse>
</template>

<script>
export default {
  data() {
    return {
      activeNames: ['1'],
      items: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' }
      ]
    }
  }
}
</script>

多级嵌套展开

实现多级列表的展开功能,通常需要递归组件。

<template>
  <div>
    <ul>
      <li v-for="item in items" :key="item.id">
        <div @click="toggleItem(item)">
          {{ item.name }}
          <span v-if="item.children">[{{ item.expanded ? '-' : '+' }}]</span>
        </div>
        <ul v-if="item.expanded && item.children">
          <li v-for="child in item.children" :key="child.id">{{ child.name }}</li>
        </ul>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        {
          id: 1,
          name: 'Parent 1',
          expanded: false,
          children: [
            { id: 11, name: 'Child 1' }
          ]
        }
      ]
    }
  },
  methods: {
    toggleItem(item) {
      if (item.children) {
        item.expanded = !item.expanded
      }
    }
  }
}
</script>

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

相关文章

vue 实现blog

vue 实现blog

Vue 实现博客的基本步骤 使用 Vue 实现博客可以分为前端和后端两部分,前端使用 Vue.js 框架,后端可以选择 Node.js、Python 或其他服务端语言。以下是一个基于 Vue 的博客实…

vue实现节流

vue实现节流

vue实现节流的方法 在Vue中实现节流(throttle)功能,通常用于限制高频事件的触发频率,例如滚动、输入或按钮点击。以下是几种常见的实现方式: 使用Lodash的throttle函数 安装L…

vue实现mouseout

vue实现mouseout

Vue 实现 mouseout 事件的方法 在 Vue 中实现 mouseout 事件可以通过多种方式完成,以下是几种常见的方法: 使用 v-on 指令 Vue 提供了 v-on 指令(或简写为 @…

vue实现swipe

vue实现swipe

Vue实现Swipe功能的方法 使用第三方库(推荐) Vue生态中有多个成熟的轮播/滑动组件库,例如vue-awesome-swiper或swiper/vue。以下是基于swiper/vue的实现示例…

vue实现视频

vue实现视频

Vue 实现视频播放的方法 在 Vue 项目中实现视频播放可以通过多种方式完成,以下是几种常见的方法: 使用 HTML5 的 <video> 标签 在 Vue 组件中直接使用 HTML…

vue实现dag

vue实现dag

Vue实现DAG(有向无环图) 在Vue中实现DAG(Directed Acyclic Graph,有向无环图)通常涉及数据结构的建模、可视化渲染以及交互逻辑处理。以下是关键实现步骤和示例代码: 数…