当前位置:首页 > VUE

vue实现展开收缩

2026-01-14 23:57:20VUE

Vue 实现展开收缩功能

使用 v-show 指令

通过 v-show 控制元素的显示与隐藏,适合简单的展开收缩场景。v-show 通过 CSS 的 display 属性切换,元素始终存在于 DOM 中。

<template>
  <div>
    <button @click="toggle">展开/收缩</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-if 完全销毁或重建 DOM 元素,适合需要频繁切换或内容较重的场景。

<template>
  <div>
    <button @click="toggle">展开/收缩</button>
    <div v-if="isExpanded">这里是需要展开收缩的内容</div>
  </div>
</template>

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

添加动画效果

结合 Vue 的 <transition> 组件实现平滑的展开收缩动画。

<template>
  <div>
    <button @click="toggle">展开/收缩</button>
    <transition name="fade">
      <div v-show="isExpanded">这里是需要展开收缩的内容</div>
    </transition>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isExpanded: false
    };
  },
  methods: {
    toggle() {
      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;
}
</style>

动态高度过渡

通过动态计算内容高度实现更自然的展开收缩效果。

<template>
  <div>
    <button @click="toggle">展开/收缩</button>
    <div ref="content" class="content" :style="{ height: contentHeight }">
      这里是需要展开收缩的内容
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isExpanded: false,
      contentHeight: '0px'
    };
  },
  methods: {
    toggle() {
      this.isExpanded = !this.isExpanded;
      if (this.isExpanded) {
        this.contentHeight = `${this.$refs.content.scrollHeight}px`;
      } else {
        this.contentHeight = '0px';
      }
    }
  }
};
</script>

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

使用第三方库

对于更复杂的展开收缩需求,可以借助第三方库如 vue-collapsevue-slide-up-down

安装 vue-slide-up-down

npm install vue-slide-up-down

使用示例:

<template>
  <div>
    <button @click="toggle">展开/收缩</button>
    <slide-up-down :active="isExpanded">
      这里是需要展开收缩的内容
    </slide-up-down>
  </div>
</template>

<script>
import SlideUpDown from 'vue-slide-up-down';

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

以上方法覆盖了从基础到高级的展开收缩实现方式,可根据具体需求选择适合的方案。

vue实现展开收缩

标签: vue
分享给朋友:

相关文章

vue实现滚动中断

vue实现滚动中断

Vue 实现滚动中断的方法 在 Vue 中实现滚动中断通常涉及监听滚动事件,并在特定条件下阻止默认行为或停止滚动。以下是几种常见方法: 监听滚动事件并阻止默认行为 通过 @scroll 或 @whe…

vue实现多级弹窗

vue实现多级弹窗

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

vue实现人脸识别比对

vue实现人脸识别比对

Vue 实现人脸识别比对的方法 使用现成的人脸识别 API 通过调用第三方人脸识别 API(如 Face++、百度 AI、腾讯云等)实现比对功能。注册开发者账号获取 API Key 和 Secret,…

vue实现用户信息表

vue实现用户信息表

Vue 实现用户信息表的方法 使用 Vue CLI 创建项目 安装 Vue CLI 并初始化项目: npm install -g @vue/cli vue create user-info-tab…

vue中实现显示和隐藏

vue中实现显示和隐藏

控制显示与隐藏的方法 在Vue中实现元素的显示和隐藏可以通过多种方式完成,以下是常见的几种方法: 1. 使用v-if指令v-if根据条件动态添加或移除DOM元素,适合需要频繁切换的场景。当条件为fa…

vue里实现增删改查

vue里实现增删改查

在Vue中实现增删改查 数据初始化 在Vue组件的data中定义初始数据和表单绑定的变量: data() { return { items: [ { id: 1, name:…