当前位置:首页 > 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 实现突出效果的方法 在 Vue 中实现突出效果可以通过多种方式,包括动态样式绑定、过渡动画、第三方库等。以下是几种常见的方法: 动态样式绑定 通过 v-bind:class 或 v-bind…

vue实现翻页效果

vue实现翻页效果

使用Vue实现翻页效果 在Vue中实现翻页效果通常需要结合分页组件和数据处理逻辑。以下是几种常见方法: 基础分页组件实现 <template> <div>…

vue实现效果展示

vue实现效果展示

Vue 实现效果展示的方法 Vue.js 提供了多种方式来实现动态效果展示,以下是一些常见的方法: 使用 Vue 的过渡和动画系统 Vue 内置了 <transition> 和 <…

h5实现左右滚动效果

h5实现左右滚动效果

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

react如何添加效果

react如何添加效果

React 添加动画效果的方法 使用 CSS 过渡动画 在 React 组件中直接通过 className 或 style 属性应用 CSS 过渡效果。定义 CSS 类包含 transition 属性…

vue实现弹幕效果

vue实现弹幕效果

实现弹幕效果的基本思路 在Vue中实现弹幕效果,通常需要结合CSS动画和动态数据渲染。弹幕的核心是让文字从右向左平滑移动,同时支持多行显示和碰撞检测。 使用CSS动画实现移动效果 通过CSS的@ke…