当前位置:首页 > VUE

折叠面板vue实现

2026-02-20 17:34:45VUE

折叠面板的 Vue 实现方法

使用 Vue 原生实现

通过 Vue 的 v-ifv-show 指令结合点击事件切换面板的显示状态。

<template>
  <div>
    <button @click="toggle">Toggle Panel</button>
    <div v-show="isOpen">
      Panel Content
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isOpen: false
    }
  },
  methods: {
    toggle() {
      this.isOpen = !this.isOpen
    }
  }
}
</script>

使用 Transition 添加动画效果

为折叠面板添加平滑的展开/折叠动画。

<template>
  <div>
    <button @click="toggle">Toggle Panel</button>
    <transition name="fade">
      <div v-show="isOpen" class="panel">
        Panel Content
      </div>
    </transition>
  </div>
</template>

<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity .5s;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
}
.panel {
  height: 100px;
  background: #eee;
}
</style>

使用第三方组件库

主流 UI 库如 Element UI、Ant Design Vue 都提供了现成的折叠面板组件。

Element UI 示例:

<template>
  <el-collapse v-model="activeNames">
    <el-collapse-item title="Panel 1" name="1">
      Content for panel 1
    </el-collapse-item>
    <el-collapse-item title="Panel 2" name="2">
      Content for panel 2
    </el-collapse-item>
  </el-collapse>
</template>

<script>
export default {
  data() {
    return {
      activeNames: ['1']
    }
  }
}
</script>

实现手风琴效果

多个折叠面板中同时只展开一个。

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

<script>
export default {
  data() {
    return {
      panels: [
        { title: 'Panel 1', content: 'Content 1', isOpen: false },
        { title: 'Panel 2', content: 'Content 2', isOpen: false }
      ]
    }
  },
  methods: {
    toggle(index) {
      this.panels.forEach((panel, i) => {
        panel.isOpen = i === index ? !panel.isOpen : false
      })
    }
  }
}
</script>

高度动画实现

使用 CSS 的 max-height 过渡实现高度变化的动画效果。

折叠面板vue实现

<template>
  <div>
    <button @click="toggle">Toggle Panel</button>
    <div class="panel" :style="{ maxHeight: isOpen ? '200px' : '0' }">
      Panel Content
    </div>
  </div>
</template>

<style>
.panel {
  overflow: hidden;
  transition: max-height 0.3s ease-out;
  background: #f5f5f5;
}
</style>

标签: 面板vue
分享给朋友:

相关文章

vue实现datalist

vue实现datalist

使用 Vue 实现 HTML5 的 datalist 功能 HTML5 的 <datalist> 元素提供了一种自动完成输入框的功能,允许用户在输入时从预定义的选项列表中选择。以下是几种在…

vue实现网站

vue实现网站

Vue 实现网站的基本步骤 Vue.js 是一个渐进式 JavaScript 框架,适合构建现代化的单页应用(SPA)或动态网站。以下是使用 Vue 实现网站的基本方法。 初始化 Vue 项目 使用…

vue实现尺子

vue实现尺子

Vue 实现尺子组件 实现一个尺子组件可以通过 Canvas 或纯 CSS 完成。以下是两种常见实现方式: 使用 Canvas 绘制尺子 通过 Canvas 动态绘制刻度线和数字,适合需要高精度或动…

vue实现tabbar

vue实现tabbar

Vue 实现 TabBar 的方法 使用 Vue Router 实现基础 TabBar 安装 Vue Router 依赖: npm install vue-router 创建路由配置文件(route…

vue 实现ztree

vue 实现ztree

在Vue中实现类似ZTree的功能,可以通过集成第三方库或自定义组件完成。以下是两种常见方法: 使用vue-tree组件 vue-tree是一个轻量级的Vue树形组件,支持复选框、懒加载等功能,适合…

vue实现座位

vue实现座位

Vue实现座位布局 使用Vue实现座位布局可以通过组件化和响应式数据管理来简化开发流程。以下是一个完整的实现方案: 数据准备 定义座位数据结构,通常使用二维数组表示行列关系: data() {…