当前位置:首页 > VUE

vue实现展开与收起

2026-01-12 04:33:20VUE

Vue 实现展开与收起功能

展开与收起是常见的交互需求,可以通过 Vue 的数据绑定和条件渲染轻松实现。以下是几种常见的实现方式:

方法一:使用 v-ifv-show 控制内容显示

<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 过渡动画

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

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

<style>
.content {
  overflow: hidden;
}
.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; /* 根据内容调整 */
}
</style>

方法三:使用第三方库(如 Element UI)

<template>
  <div>
    <el-collapse>
      <el-collapse-item title="折叠面板">
        这里是需要展开收起的内容
      </el-collapse-item>
    </el-collapse>
  </div>
</template>

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

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

方法四:多内容展开收起

<template>
  <div>
    <div v-for="(item, index) in items" :key="index">
      <button @click="toggleItem(index)">
        {{ expandedItems[index] ? '收起' : '展开' }}
      </button>
      <div v-show="expandedItems[index]">
        {{ item.content }}
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { content: '内容1' },
        { content: '内容2' },
        { content: '内容3' }
      ],
      expandedItems: []
    }
  },
  created() {
    this.expandedItems = this.items.map(() => false)
  },
  methods: {
    toggleItem(index) {
      this.$set(this.expandedItems, index, !this.expandedItems[index])
    }
  }
}
</script>

注意事项

  1. 性能考虑:对于大量内容,v-showv-if 更合适,因为 v-show 只是切换 CSS 显示属性,而 v-if 会销毁和重建 DOM 节点

  2. 动画优化:使用 CSS 过渡时,建议使用 max-height 而非 height,因为内容高度可能不确定

  3. 可访问性:为按钮添加适当的 ARIA 属性,如 aria-expandedaria-controls

  4. 组件封装:如果项目中多处需要展开收起功能,可以将其封装为可复用组件

    vue实现展开与收起

以上方法可以根据实际需求选择使用,简单场景用方法一即可,需要动画效果用方法二,已有 UI 框架的项目可以考虑方法三,多内容控制则使用方法四。

标签: vue
分享给朋友:

相关文章

vue底层实现

vue底层实现

Vue.js 的底层实现原理 Vue.js 是一个渐进式 JavaScript 框架,其核心实现主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是其关键实现细节: 响应式系统 Vue 2…

vue实现 hover

vue实现 hover

实现 Vue 中的 hover 效果 在 Vue 中实现 hover 效果可以通过多种方式完成,以下是常见的几种方法: 使用 CSS 伪类 最简单的方式是直接使用 CSS 的 :hover 伪类,无…

vue实现日历

vue实现日历

Vue 实现日历的基本方法 使用 Vue 实现日历可以通过自定义组件或借助第三方库完成。以下是两种常见实现方式: 自定义日历组件 创建基于 Vue 的日历组件需要处理日期计算和渲染逻辑。核心是生成当…

vue for实现

vue for实现

Vue 中的 v-for 指令 v-for 是 Vue.js 中用于渲染列表数据的核心指令,通过遍历数组或对象生成动态内容。 基本语法(数组) <ul> <li v-for…

vue指令实现

vue指令实现

Vue 指令的实现方式 Vue 指令是特殊的标记,用于在 DOM 元素上应用特定的行为。可以通过全局或局部方式注册自定义指令。 全局注册指令 在 Vue 应用中通过 Vue.directive 方法…

vue实现watch

vue实现watch

监听数据变化 在Vue中,watch用于监听响应式数据的变化并执行回调函数。基本语法如下: watch: { propertyName(newValue, oldValue) { //…