当前位置:首页 > VUE

vue实现展开与收起

2026-03-06 17:23:24VUE

Vue实现展开与收起功能

基础实现:使用v-show或v-if

通过Vue的指令v-showv-if控制元素的显示与隐藏,配合按钮切换状态。

vue实现展开与收起

<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>

动态高度过渡效果

结合CSS过渡实现平滑的展开/收起动画,适用于高度不确定的内容。

vue实现展开与收起

<template>
  <div>
    <button @click="toggle">{{ isExpanded ? '收起' : '展开' }}</button>
    <div 
      class="expandable" 
      :style="{ maxHeight: isExpanded ? maxHeight + 'px' : '0' }"
    >
      这里是需要展开/收起的内容
    </div>
  </div>
</template>

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

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

使用第三方库(如Vue Transition)

利用Vue的<transition>组件实现更复杂的动画效果。

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

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

<style>
.slide-enter-active, .slide-leave-active {
  transition: max-height 0.5s ease;
  max-height: 500px;
}
.slide-enter, .slide-leave-to {
  max-height: 0;
}
.content {
  overflow: hidden;
}
</style>

多级展开与收起

适用于嵌套内容的展开/收起场景,通过递归组件或动态渲染实现。

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

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

性能优化

对于大量内容的展开/收起,使用v-show替代v-if可以减少DOM操作的开销。同时,避免在频繁切换的组件中使用复杂的计算属性或侦听器。

标签: vue
分享给朋友:

相关文章

vue页面分离的实现

vue页面分离的实现

Vue页面分离的实现方法 将Vue页面分离为多个组件或模块,有助于提升代码可维护性和复用性。以下是几种常见的实现方式: 组件化拆分 通过将页面拆分为多个子组件,每个组件负责特定功能或UI部分。使用i…

vue 实现挂载

vue 实现挂载

Vue 实现挂载的基本方法 在 Vue 中,挂载是将 Vue 实例与 DOM 元素关联的过程。通过挂载,Vue 可以管理 DOM 并实现数据绑定和响应式更新。 创建 Vue 实例并挂载 const…

vue observer实现

vue observer实现

Vue Observer 实现原理 Vue 的响应式系统核心是通过 Object.defineProperty(Vue 2)或 Proxy(Vue 3)实现的 Observer 模式。以下是关键实现细…

vue实现list

vue实现list

Vue 实现列表渲染 在 Vue 中,可以使用 v-for 指令来渲染列表。v-for 指令基于一个数组或对象来渲染一个列表,可以遍历数组或对象的属性。 基本列表渲染 <template>…

vue 实现拖拉

vue 实现拖拉

Vue 实现拖拽功能的方法 使用 HTML5 原生拖放 API HTML5 提供了原生的拖放 API,可以通过 draggable 属性、dragstart、dragend、dragover 和 dr…

vue实现curd

vue实现curd

Vue实现CRUD操作 初始化Vue项目 使用Vue CLI创建新项目,安装必要依赖如axios用于HTTP请求 vue create crud-demo cd crud-demo npm inst…