当前位置:首页 > VUE

vue实现展开收起

2026-01-18 00:22:16VUE

Vue 实现展开收起功能

使用 v-ifv-show 控制显示

通过 Vue 的指令 v-ifv-show 可以轻松实现内容的展开与收起。v-if 会动态添加或移除 DOM 元素,而 v-show 仅切换 CSS 的 display 属性。

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

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

使用 CSS 过渡动画

结合 Vue 的 <transition> 组件,可以为展开收起添加平滑的过渡效果。

<template>
  <div>
    <button @click="toggleContent">点击{{ isExpanded ? '收起' : '展开' }}</button>
    <transition name="fade">
      <div v-if="isExpanded" class="content">这里是需要展开收起的内容</div>
    </transition>
  </div>
</template>

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

<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity 0.5s, max-height 0.5s;
  max-height: 500px;
  overflow: hidden;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
  max-height: 0;
}
.content {
  padding: 10px;
  background: #f5f5f5;
}
</style>

动态计算高度实现动画

如果需要更精确的动画效果,可以通过动态计算内容高度并结合 CSS 实现。

vue实现展开收起

<template>
  <div>
    <button @click="toggleContent">点击{{ isExpanded ? '收起' : '展开' }}</button>
    <div
      class="content"
      :style="{ height: isExpanded ? contentHeight + 'px' : '0' }"
      ref="content"
    >
      这里是需要展开收起的内容
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isExpanded: false,
      contentHeight: 0
    }
  },
  mounted() {
    this.contentHeight = this.$refs.content.scrollHeight
  },
  methods: {
    toggleContent() {
      this.isExpanded = !this.isExpanded
    }
  }
}
</script>

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

使用第三方库(如 vue-collapse

对于更复杂的需求,可以使用第三方库如 vue-collapse 来快速实现展开收起功能。

安装依赖:

vue实现展开收起

npm install vue-collapse --save

示例代码:

<template>
  <div>
    <button @click="toggleContent">点击{{ isExpanded ? '收起' : '展开' }}</button>
    <vue-collapse v-model="isExpanded">
      <div class="content">这里是需要展开收起的内容</div>
    </vue-collapse>
  </div>
</template>

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

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

多级展开收起

对于多级菜单或嵌套内容的展开收起,可以通过递归组件或嵌套数据实现。

<template>
  <div>
    <div v-for="item in items" :key="item.id">
      <button @click="toggleItem(item)">{{ item.name }}</button>
      <div v-if="item.expanded">
        <div v-for="child in item.children" :key="child.id">{{ child.name }}</div>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        {
          id: 1,
          name: '菜单1',
          expanded: false,
          children: [
            { id: 11, name: '子菜单1' },
            { id: 12, name: '子菜单2' }
          ]
        },
        {
          id: 2,
          name: '菜单2',
          expanded: false,
          children: [
            { id: 21, name: '子菜单1' },
            { id: 22, name: '子菜单2' }
          ]
        }
      ]
    }
  },
  methods: {
    toggleItem(item) {
      item.expanded = !item.expanded
    }
  }
}
</script>

通过以上方法,可以灵活实现 Vue 中的展开收起功能,满足不同场景的需求。

标签: vue
分享给朋友:

相关文章

vue实现导航栏切换

vue实现导航栏切换

Vue实现导航栏切换的方法 使用v-for和v-bind动态渲染导航项 通过v-for循环遍历导航数据数组,结合v-bind动态绑定class或style。当点击导航项时,更新当前选中项的索引或ID。…

vue组件的实现

vue组件的实现

Vue 组件的实现方式 Vue 组件可以通过多种方式实现,以下是常见的几种方法: 单文件组件 (SFC) 使用 .vue 文件,包含模板、脚本和样式三部分: <template>…

vue实现分支

vue实现分支

Vue 实现分支的方法 在 Vue 项目中实现分支功能通常涉及条件渲染、动态组件或路由控制。以下是几种常见的实现方式: 条件渲染(v-if/v-show) 使用 Vue 的指令根据条件显示不同内容:…

vue 实现目录

vue 实现目录

Vue 实现目录的方法 在 Vue 项目中实现目录功能,可以通过以下几种方式实现,具体取决于需求和技术栈。 使用 Vue Router 实现路由目录 Vue Router 是 Vue.js 的官方路…

vue实现多级弹窗

vue实现多级弹窗

Vue 多级弹窗实现方法 方法一:使用动态组件与递归组件 在 Vue 中可以通过动态组件配合递归组件实现多级弹窗。定义一个基础弹窗组件,通过递归调用自身实现层级嵌套。 基础弹窗组件模板示例: &…

vue实现适老化样式

vue实现适老化样式

Vue 实现适老化样式的关键方法 全局字体与字号调整 通过 CSS 变量或主题配置统一放大基础字号,建议正文不小于 18px,标题更大。在 App.vue 中设置全局样式: :root { -…