当前位置:首页 > 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 添加动画效果

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

折叠面板vue实现

<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 示例:

折叠面板vue实现

<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 过渡实现高度变化的动画效果。

<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
分享给朋友:

相关文章

jq 实现 vue

jq 实现 vue

jq 实现 Vue 的核心功能 jq 是一个轻量级的 JavaScript 库,主要用于 DOM 操作和事件处理。虽然它不能完全替代 Vue,但可以通过一些技巧模拟 Vue 的核心功能,如数据绑定、事…

vue功能实现

vue功能实现

Vue 功能实现指南 Vue.js 是一个渐进式 JavaScript 框架,广泛用于构建用户界面。以下是 Vue 功能的常见实现方法。 数据绑定 Vue 的核心功能之一是数据绑定,通过 v-mod…

vue实现ios

vue实现ios

Vue 实现 iOS 风格应用 使用 Vue 实现 iOS 风格的应用,可以通过结合 UI 框架和自定义样式来达成目标。以下是具体方法和步骤: 选择 iOS 风格的 UI 框架 Vue 生态中有多…

vue 实现全屏

vue 实现全屏

Vue 实现全屏功能 在 Vue 中实现全屏功能可以通过浏览器提供的 Fullscreen API 完成。以下是一个完整的实现方案: 安装依赖(可选) 如果需要跨浏览器兼容性更好,可以安装…

vue 实现分屏

vue 实现分屏

Vue 实现分屏的方法 使用 CSS Flexbox 或 Grid 布局 通过 CSS Flexbox 或 Grid 布局可以轻松实现分屏效果。在 Vue 组件中定义两个或多个区域,并使用 CSS 控…

vue filter 实现

vue filter 实现

在 Vue.js 中,过滤器(Filter)是一种用于文本格式化的功能,可以在模板中直接使用。以下是实现过滤器的详细方法: 全局过滤器注册 通过 Vue.filter 方法注册全局过滤器,可在所有组…