当前位置:首页 > 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中实现拖拽效果可以通过原生HTML5的拖拽API或第三方库如vuedraggable来完成。以下是两种常见方法的详细说明。 使用HTML5拖拽API HTML5提供了…

vue实现效果展示

vue实现效果展示

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

js实现点击效果

js实现点击效果

实现点击效果的JavaScript方法 使用addEventListener绑定点击事件 通过document.getElementById或document.querySelector获取DOM元素…

vue实现点击效果

vue实现点击效果

实现点击效果的方法 在Vue中实现点击效果可以通过多种方式完成,以下是几种常见的实现方法: 使用v-on或@click绑定事件 通过v-on:click或简写@click绑定点击事件,触发方法或直…

vue 实现过渡效果

vue 实现过渡效果

Vue 过渡效果实现方法 Vue 提供了 <transition> 和 <transition-group> 组件,用于在元素插入、更新或移除时应用动画效果。以下是具体实现方式…

vue实现歌词效果

vue实现歌词效果

Vue实现歌词效果 数据准备 歌词通常以时间轴和文本形式存储,可采用数组或对象格式。例如: lyrics: [ { time: 0.5, text: "第一句歌词" }, { time: 3…