当前位置:首页 > VUE

vue列表展开实现

2026-01-17 12:48:19VUE

Vue 列表展开实现方法

使用 v-for 和 v-show 控制展开状态

通过 v-for 渲染列表项,配合 v-show 控制子内容的显示隐藏。需要为每个列表项维护一个展开状态。

vue列表展开实现

<template>
  <div>
    <div v-for="item in items" :key="item.id">
      <div @click="toggleExpand(item.id)">{{ item.title }}</div>
      <div v-show="expandedItems.includes(item.id)">
        {{ item.content }}
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, title: '标题1', content: '内容1' },
        { id: 2, title: '标题2', content: '内容2' }
      ],
      expandedItems: []
    }
  },
  methods: {
    toggleExpand(id) {
      const index = this.expandedItems.indexOf(id)
      if (index > -1) {
        this.expandedItems.splice(index, 1)
      } else {
        this.expandedItems.push(id)
      }
    }
  }
}
</script>

使用动态组件实现展开效果

通过动态组件可以更灵活地控制展开内容的显示方式。

vue列表展开实现

<template>
  <div>
    <div v-for="item in items" :key="item.id">
      <div @click="currentExpanded = currentExpanded === item.id ? null : item.id">
        {{ item.title }}
      </div>
      <transition name="fade">
        <div v-if="currentExpanded === item.id">
          {{ item.content }}
        </div>
      </transition>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, title: '标题1', content: '内容1' },
        { id: 2, title: '标题2', content: '内容2' }
      ],
      currentExpanded: null
    }
  }
}
</script>

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

使用第三方组件库实现

Element UI 等组件库提供了现成的展开组件,可以快速实现需求。

<template>
  <el-collapse v-model="activeNames">
    <el-collapse-item 
      v-for="item in items" 
      :key="item.id" 
      :title="item.title" 
      :name="item.id"
    >
      {{ item.content }}
    </el-collapse-item>
  </el-collapse>
</template>

<script>
export default {
  data() {
    return {
      activeNames: [],
      items: [
        { id: 1, title: '标题1', content: '内容1' },
        { id: 2, title: '标题2', content: '内容2' }
      ]
    }
  }
}
</script>

使用 CSS 过渡效果增强用户体验

为展开动作添加平滑的过渡效果,提升用户体验。

<template>
  <div>
    <div v-for="item in items" :key="item.id">
      <div @click="toggleExpand(item.id)" class="title">
        {{ item.title }}
      </div>
      <div 
        class="content" 
        :class="{ 'expanded': expandedItems.includes(item.id) }"
      >
        {{ item.content }}
      </div>
    </div>
  </div>
</template>

<style>
.content {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.3s ease-out;
}
.content.expanded {
  max-height: 500px;
  transition: max-height 0.5s ease-in;
}
</style>

以上方法可以根据具体需求选择使用,从简单到复杂提供了多种实现方案。

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

相关文章

vue实现静态查询

vue实现静态查询

Vue 实现静态查询 在 Vue 中实现静态查询通常指不依赖后端接口,直接在前端处理数据筛选或搜索功能。以下是几种常见实现方式: 使用计算属性过滤数据 通过计算属性对静态数据进行筛选,适合简单查询…

vue查看更多怎么实现

vue查看更多怎么实现

实现 Vue 的“查看更多”功能 数据截取与显示控制 通过 v-if 或 v-show 控制内容的显示与隐藏。初始状态下只显示部分内容,点击“查看更多”后展开完整内容。 <template&…

vue实现冰墩墩

vue实现冰墩墩

使用 Vue 实现冰墩墩动画 通过 Vue 的动画特性和 SVG 技术,可以动态渲染冰墩墩的形象。以下是具体实现方法: 准备 SVG 素材 冰墩墩的形象通常由多个 SVG 路径组成,包括身体轮廓、面…

vue实现下载暂停

vue实现下载暂停

Vue实现下载暂停功能 在Vue中实现下载暂停功能,通常需要结合XMLHttpRequest或Fetch API的AbortController来控制请求中断。以下是具体实现方法: 使用XMLHtt…

vue中实现显示和隐藏

vue中实现显示和隐藏

控制显示与隐藏的方法 在Vue中实现元素的显示和隐藏可以通过多种方式完成,以下是常见的几种方法: 1. 使用v-if指令v-if根据条件动态添加或移除DOM元素,适合需要频繁切换的场景。当条件为f…

vue实现右下角弹框

vue实现右下角弹框

实现右下角弹框的基本思路 在Vue中实现右下角弹框,通常需要结合CSS定位和Vue的组件化特性。弹框可以通过绝对定位固定在右下角,并通过Vue控制其显示与隐藏。 创建弹框组件 新建一个Vue组件(如…