当前位置:首页 > VUE

vue实现列表收缩展开

2026-01-23 06:09:30VUE

vue实现列表收缩展开的方法

使用v-show控制显示隐藏

通过v-show指令绑定布尔值控制元素的显示与隐藏,适合频繁切换的场景。v-show仅切换CSS的display属性,不会重新渲染DOM。

<template>
  <div>
    <button @click="toggleList">切换列表</button>
    <ul v-show="isShow">
      <li v-for="item in items" :key="item.id">{{ item.name }}</li>
    </ul>
  </div>
</template>

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

使用v-if条件渲染

v-if会根据条件销毁或重建DOM元素,适合不频繁切换的场景。可以结合transition实现动画效果。

<template>
  <div>
    <button @click="toggleList">切换列表</button>
    <transition name="fade">
      <ul v-if="isShow">
        <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 .5s;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
}
</style>

动态绑定class实现动画

通过动态切换class实现更复杂的展开/收缩动画效果,利用CSS的max-height属性平滑过渡。

<template>
  <div>
    <button @click="toggleList">切换列表</button>
    <ul :class="{ 'collapsed': !isShow }">
      <li v-for="item in items" :key="item.id">{{ item.name }}</li>
    </ul>
  </div>
</template>

<style>
ul {
  max-height: 500px;
  overflow: hidden;
  transition: max-height 0.3s ease-out;
}
ul.collapsed {
  max-height: 0;
}
</style>

使用第三方动画库

引入Vue官方推荐的动画库如vue-animateanimate.css,可以快速实现丰富的动画效果。

<template>
  <div>
    <button @click="toggleList">切换列表</button>
    <ul v-show="isShow" class="animate__animated animate__fadeIn">
      <li v-for="item in items" :key="item.id">{{ item.name }}</li>
    </ul>
  </div>
</template>

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

组件化实现可复用逻辑

将列表展开/收缩功能封装为可复用组件,通过插槽和props实现灵活配置。

<!-- ExpandableList.vue -->
<template>
  <div>
    <button @click="toggle">{{ buttonText }}</button>
    <transition name="slide">
      <ul v-show="isExpanded">
        <slot></slot>
      </ul>
    </transition>
  </div>
</template>

<script>
export default {
  props: {
    buttonText: {
      type: String,
      default: 'Toggle List'
    }
  },
  data() {
    return {
      isExpanded: false
    }
  },
  methods: {
    toggle() {
      this.isExpanded = !this.isExpanded
    }
  }
}
</script>

vue实现列表收缩展开

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

相关文章

vue怎么实现数据检测

vue怎么实现数据检测

Vue 数据检测的实现方式 Vue 通过响应式系统实现数据检测,核心机制基于 Object.defineProperty(Vue 2)或 Proxy(Vue 3)。以下是具体实现方法: 基于 Vue…

vue实现滚动截屏

vue实现滚动截屏

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

vue实现一个系统

vue实现一个系统

Vue 系统实现步骤 项目初始化与配置 使用 Vue CLI 或 Vite 创建项目: npm init vue@latest my-system 选择需要的配置(Router、Pinia 等)。…

vue实现星星

vue实现星星

实现星星评分的Vue组件 使用Vue实现星星评分功能可以通过组件化方式完成,以下是一个完整的实现方案: 模板部分 <template> <div class="star-ra…

vue实现拖放

vue实现拖放

Vue 实现拖放功能 Vue 中实现拖放功能通常可以通过 HTML5 的原生拖放 API 或第三方库(如 vuedraggable)来实现。以下是两种方法的详细说明。 使用 HTML5 原生拖放 A…

vue实现granfana

vue实现granfana

Vue 实现类似 Grafana 的仪表盘 要在 Vue 中实现类似 Grafana 的仪表盘功能,需要结合数据可视化库、状态管理和 UI 组件。以下是关键步骤和推荐工具: 数据可视化库 使用…