当前位置:首页 > VUE

vue实现展开与收起

2026-03-27 02:21:25VUE

Vue 实现展开与收起功能

使用 v-show 指令

通过 v-show 控制元素的显示与隐藏,结合按钮切换状态:

<template>
  <div>
    <button @click="toggle">{{ isExpanded ? '收起' : '展开' }}</button>
    <div v-show="isExpanded">需要展开/收起的内容</div>
  </div>
</template>

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

使用 v-if 指令

v-show 类似,但 v-if 会完全销毁和重建 DOM 元素:

vue实现展开与收起

<template>
  <div>
    <button @click="toggle">{{ isExpanded ? '收起' : '展开' }}</button>
    <div v-if="isExpanded">需要展开/收起的内容</div>
  </div>
</template>

动态高度过渡动画

结合 CSS 过渡实现平滑动画效果:

vue实现展开与收起

<template>
  <div>
    <button @click="toggle">{{ isExpanded ? '收起' : '展开' }}</button>
    <div class="content" :style="{ height: isExpanded ? 'auto' : '0' }">
      <div class="inner">需要展开/收起的内容</div>
    </div>
  </div>
</template>

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

<style>
.content {
  overflow: hidden;
  transition: height 0.3s ease;
}
.inner {
  padding: 10px;
}
</style>

使用第三方组件

vue-collapse 等现成组件:

<template>
  <div>
    <button @click="toggle">{{ isExpanded ? '收起' : '展开' }}</button>
    <vue-collapse v-model="isExpanded">
      <div>需要展开/收起的内容</div>
    </vue-collapse>
  </div>
</template>

<script>
import { VueCollapse } from 'vue-collapse'

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

多级展开与收起

适用于嵌套结构的展开/收起:

<template>
  <div>
    <div v-for="item in items" :key="item.id">
      <button @click="toggle(item)">{{ item.expanded ? '收起' : '展开' }}</button>
      <div v-show="item.expanded">{{ item.content }}</div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, content: '内容1', expanded: false },
        { id: 2, content: '内容2', expanded: false }
      ]
    }
  },
  methods: {
    toggle(item) {
      item.expanded = !item.expanded
    }
  }
}
</script>

注意事项

  • v-show 只是切换 display 属性,适合频繁切换的场景
  • v-if 会完全销毁和重建 DOM,适合不频繁切换的场景
  • 过渡动画需要配合 CSS 的 transition 属性实现
  • 动态高度计算时可能需要获取元素的实际高度
  • 多级展开时注意数据结构的合理设计

标签: vue
分享给朋友:

相关文章

前端vue登录功能实现

前端vue登录功能实现

Vue 登录功能实现步骤 创建登录表单组件 在 Vue 项目中创建一个登录组件,通常命名为 Login.vue。该组件包含用户名和密码输入框以及提交按钮。 <template> &l…

vue实现文章锚点定位

vue实现文章锚点定位

实现文章锚点定位的方法 在Vue中实现文章锚点定位可以通过多种方式完成,以下是几种常见的方法: 使用原生HTML锚点 通过HTML的id属性和<a>标签的href属性实现锚点跳转。在Vu…

vue compile 实现

vue compile 实现

Vue 编译实现原理 Vue 的编译过程将模板字符串转换为渲染函数,主要分为解析、优化和代码生成三个阶段。 解析阶段(Parse) 将模板字符串转换为抽象语法树(AST)。Vue 使用正则表达式和有…

vue el 实现

vue el 实现

Vue 中使用 Element UI (el) 的实现方法 Element UI 是一个基于 Vue 的组件库,提供丰富的 UI 组件,常用于快速构建企业级中后台产品。以下介绍 Vue 项目中集成和使…

vue原理实现

vue原理实现

Vue 原理实现的核心机制 Vue.js 的核心原理基于响应式系统、虚拟 DOM 和模板编译。以下是其核心实现机制的分解: 响应式系统 Vue 使用 Object.defineProperty(Vu…

vue 实现href

vue 实现href

Vue 实现 href 的方法 在 Vue 中实现 href 功能可以通过多种方式,具体取决于需求场景。以下是几种常见的方法: 使用 <a> 标签 直接使用 HTML 的 <a&g…