当前位置:首页 > VUE

vue实现折叠效果

2026-01-16 17:56:23VUE

使用 v-showv-if 实现基础折叠

通过 Vue 的指令 v-showv-if 控制元素的显示与隐藏。v-show 通过 CSS 的 display 属性切换,v-if 直接操作 DOM。

<template>
  <div>
    <button @click="isCollapsed = !isCollapsed">切换折叠</button>
    <div v-show="!isCollapsed">可折叠的内容</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isCollapsed: false
    };
  }
};
</script>

结合 CSS 过渡动画

通过 Vue 的 <transition> 组件和 CSS 实现平滑的折叠动画效果。

<template>
  <div>
    <button @click="isCollapsed = !isCollapsed">切换折叠</button>
    <transition name="slide">
      <div v-show="!isCollapsed" class="content">带动画的折叠内容</div>
    </transition>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isCollapsed: false
    };
  }
};
</script>

<style>
.slide-enter-active, .slide-leave-active {
  transition: max-height 0.5s ease;
}
.slide-enter-from, .slide-leave-to {
  max-height: 0;
  overflow: hidden;
}
.slide-enter-to, .slide-leave-from {
  max-height: 1000px;
}
.content {
  overflow: hidden;
}
</style>

使用第三方库(如 vue-collapse

对于更复杂的折叠需求,可以集成第三方库如 vue-collapse,提供更多功能(如手风琴效果)。

vue实现折叠效果

安装库:

npm install vue-collapse

示例代码:

vue实现折叠效果

<template>
  <div>
    <vue-collapse v-model="activePanels">
      <vue-collapse-item title="标题1" name="1">内容1</vue-collapse-item>
      <vue-collapse-item title="标题2" name="2">内容2</vue-collapse-item>
    </vue-collapse>
  </div>
</template>

<script>
import { VueCollapse, VueCollapseItem } from 'vue-collapse';

export default {
  components: { VueCollapse, VueCollapseItem },
  data() {
    return {
      activePanels: ['1']
    };
  }
};
</script>

动态生成折叠面板

通过 v-for 动态渲染多个折叠项,并管理各自的状态。

<template>
  <div>
    <div v-for="(item, index) in items" :key="index">
      <button @click="toggleItem(index)">{{ item.title }}</button>
      <div v-show="item.isOpen">{{ item.content }}</div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { title: '标题1', content: '内容1', isOpen: false },
        { title: '标题2', content: '内容2', isOpen: false }
      ]
    };
  },
  methods: {
    toggleItem(index) {
      this.items[index].isOpen = !this.items[index].isOpen;
    }
  }
};
</script>

手风琴效果(单一展开)

确保每次只展开一个折叠项,通过维护当前展开的索引实现。

<template>
  <div>
    <div v-for="(item, index) in items" :key="index">
      <button @click="setActive(index)">{{ item.title }}</button>
      <div v-show="activeIndex === index">{{ item.content }}</div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      activeIndex: null,
      items: [
        { title: '标题1', content: '内容1' },
        { title: '标题2', content: '内容2' }
      ]
    };
  },
  methods: {
    setActive(index) {
      this.activeIndex = this.activeIndex === index ? null : index;
    }
  }
};
</script>

标签: 效果vue
分享给朋友:

相关文章

js实现vue

js实现vue

Vue.js 的基本实现方法 在 JavaScript 中实现 Vue.js 的功能,可以通过直接引入 Vue 库或使用现代构建工具(如 Vite 或 Webpack)。以下是几种常见的实现方式:…

vue实现modal

vue实现modal

Vue 实现 Modal 弹窗组件 使用 Vue 实现 Modal 弹窗组件可以通过多种方式,包括原生 Vue 组件、第三方库或自定义指令。以下是几种常见方法: 原生 Vue 组件实现 创建一个基础…

jquery实现vue

jquery实现vue

jQuery 和 Vue.js 是两种不同理念的前端工具,jQuery 以 DOM 操作和事件驱动为核心,而 Vue.js 是数据驱动的现代化框架。如果想用 jQuery 实现类似 Vue 的功能(如…

vue单选实现

vue单选实现

Vue 单选实现 在 Vue 中实现单选功能可以通过多种方式完成,以下是几种常见的方法: 使用 v-model 绑定单选按钮 通过 v-model 绑定一个变量,可以实现单选效果。当用户选择不同的选…

vue实现加载

vue实现加载

Vue 实现加载功能的方法 使用 v-if 或 v-show 控制加载状态 通过数据绑定控制加载动画的显示与隐藏。v-if 会完全移除 DOM 元素,v-show 只是切换 display 属性。…

vue sku 实现

vue sku 实现

Vue SKU 实现方案 在电商系统中,SKU(Stock Keeping Unit)是商品的最小库存单位,通常由多个属性组合而成(如颜色、尺寸等)。以下是基于 Vue 的实现方案。 数据结构设计…