当前位置:首页 > VUE

vue实现面板收缩效果

2026-02-23 03:31:57VUE

使用 Vue 实现面板收缩效果

使用 v-show 指令

通过 v-show 控制面板的显示与隐藏,结合按钮切换状态。

<template>
  <div>
    <button @click="isCollapsed = !isCollapsed">
      {{ isCollapsed ? '展开' : '折叠' }}
    </button>
    <div v-show="!isCollapsed">
      面板内容
    </div>
  </div>
</template>

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

使用 transition 添加动画效果

结合 Vue 的 <transition> 组件实现平滑的展开/折叠动画。

vue实现面板收缩效果

<template>
  <div>
    <button @click="isCollapsed = !isCollapsed">
      {{ isCollapsed ? '展开' : '折叠' }}
    </button>
    <transition name="slide">
      <div v-show="!isCollapsed" class="panel">
        面板内容
      </div>
    </transition>
  </div>
</template>

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

使用动态样式绑定

通过动态绑定 classstyle 实现高度变化效果。

vue实现面板收缩效果

<template>
  <div>
    <button @click="togglePanel">切换面板</button>
    <div 
      ref="panel" 
      :style="{ height: isCollapsed ? '0px' : panelHeight + 'px' }"
      class="panel"
    >
      面板内容
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isCollapsed: false,
      panelHeight: 0
    }
  },
  mounted() {
    this.panelHeight = this.$refs.panel.scrollHeight
  },
  methods: {
    togglePanel() {
      this.isCollapsed = !this.isCollapsed
    }
  }
}
</script>

<style>
.panel {
  overflow: hidden;
  transition: height 0.3s ease;
}
</style>

使用第三方组件库

Element UI 或 Ant Design Vue 等库提供现成的折叠面板组件。

以 Element UI 为例:

<template>
  <el-collapse>
    <el-collapse-item title="面板标题">
      面板内容
    </el-collapse-item>
  </el-collapse>
</template>

<script>
import { ElCollapse, ElCollapseItem } from 'element-plus'

export default {
  components: {
    ElCollapse,
    ElCollapseItem
  }
}
</script>

注意事项

  • 使用 v-show 会保留 DOM 元素,适合频繁切换的场景
  • 使用 v-if 会销毁和重建 DOM,适合不频繁切换的场景
  • 动画效果需要处理好 overflowmax-height 属性
  • 动态内容变化后可能需要重新计算高度

标签: 面板效果
分享给朋友:

相关文章

vue实现对话框效果

vue实现对话框效果

Vue 对话框实现方法 使用组件化方式封装对话框 创建一个独立的对话框组件(如Dialog.vue),通过v-model控制显示隐藏: <template> <div cla…

h5实现左右滚动效果

h5实现左右滚动效果

使用CSS实现横向滚动 在HTML5中实现左右滚动效果,可以通过CSS的overflow-x属性配合white-space或flex布局实现。以下是一个基础示例: <div class="s…

h5页面滑动效果实现

h5页面滑动效果实现

实现H5页面滑动效果的方法 H5页面滑动效果可以通过多种方式实现,包括原生JavaScript、CSS动画或第三方库。以下是几种常见的方法: 使用CSS Scroll Snap CSS Scrol…

vue实现翻书效果

vue实现翻书效果

Vue实现翻书效果的方法 翻书效果可以通过CSS动画和Vue的动态绑定实现,以下是几种常见的实现方式: 使用CSS transform和transition 通过CSS的transform属…

vue实现抽屉效果

vue实现抽屉效果

Vue 实现抽屉效果的方法 使用 Vue 过渡动画和 CSS 在 Vue 中可以通过 v-if 或 v-show 控制抽屉的显示隐藏,结合 <transition> 组件实现平滑动画效果。…

vue 实现滑动效果

vue 实现滑动效果

Vue 实现滑动效果的方法 使用 CSS Transition 通过 Vue 的 v-if 或 v-show 结合 CSS Transition 实现滑动效果。定义一个 CSS 类,利用 transf…