当前位置:首页 > VUE

vue实现列表收缩展开

2026-01-23 06:09:30VUE

vue实现列表收缩展开的方法

使用v-show控制显示隐藏

通过v-show指令绑定布尔值控制元素的显示与隐藏,适合频繁切换的场景。v-show仅切换CSS的display属性,不会重新渲染DOM。

<template>
  <div>
    <button @click="toggleList">切换列表</button>
    <ul v-show="isShow">
      <li v-for="item in items" :key="item.id">{{ item.name }}</li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isShow: false,
      items: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' }
      ]
    }
  },
  methods: {
    toggleList() {
      this.isShow = !this.isShow
    }
  }
}
</script>

使用v-if条件渲染

v-if会根据条件销毁或重建DOM元素,适合不频繁切换的场景。可以结合transition实现动画效果。

vue实现列表收缩展开

<template>
  <div>
    <button @click="toggleList">切换列表</button>
    <transition name="fade">
      <ul v-if="isShow">
        <li v-for="item in items" :key="item.id">{{ item.name }}</li>
      </ul>
    </transition>
  </div>
</template>

<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity .5s;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
}
</style>

动态绑定class实现动画

通过动态切换class实现更复杂的展开/收缩动画效果,利用CSS的max-height属性平滑过渡。

vue实现列表收缩展开

<template>
  <div>
    <button @click="toggleList">切换列表</button>
    <ul :class="{ 'collapsed': !isShow }">
      <li v-for="item in items" :key="item.id">{{ item.name }}</li>
    </ul>
  </div>
</template>

<style>
ul {
  max-height: 500px;
  overflow: hidden;
  transition: max-height 0.3s ease-out;
}
ul.collapsed {
  max-height: 0;
}
</style>

使用第三方动画库

引入Vue官方推荐的动画库如vue-animateanimate.css,可以快速实现丰富的动画效果。

<template>
  <div>
    <button @click="toggleList">切换列表</button>
    <ul v-show="isShow" class="animate__animated animate__fadeIn">
      <li v-for="item in items" :key="item.id">{{ item.name }}</li>
    </ul>
  </div>
</template>

<script>
import 'animate.css'
export default {
  data() {
    return {
      isShow: false,
      items: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' }
      ]
    }
  },
  methods: {
    toggleList() {
      this.isShow = !this.isShow
    }
  }
}
</script>

组件化实现可复用逻辑

将列表展开/收缩功能封装为可复用组件,通过插槽和props实现灵活配置。

<!-- ExpandableList.vue -->
<template>
  <div>
    <button @click="toggle">{{ buttonText }}</button>
    <transition name="slide">
      <ul v-show="isExpanded">
        <slot></slot>
      </ul>
    </transition>
  </div>
</template>

<script>
export default {
  props: {
    buttonText: {
      type: String,
      default: 'Toggle List'
    }
  },
  data() {
    return {
      isExpanded: false
    }
  },
  methods: {
    toggle() {
      this.isExpanded = !this.isExpanded
    }
  }
}
</script>

标签: 列表vue
分享给朋友:

相关文章

vue实现主页

vue实现主页

Vue 实现主页的基本步骤 创建一个 Vue 主页通常涉及以下几个关键步骤,从项目初始化到页面布局和功能实现。 初始化 Vue 项目 使用 Vue CLI 或 Vite 初始化项目。Vue CLI…

vue实现公告

vue实现公告

Vue 实现公告功能的方法 公告功能通常需要实现滚动展示、自动切换或固定显示的效果。以下是几种常见的实现方式: 使用 marquee 标签实现滚动公告 <template> &l…

vue实现键盘

vue实现键盘

Vue 实现键盘功能 在Vue中实现键盘功能通常涉及监听键盘事件、处理输入以及渲染虚拟键盘界面。以下是几种常见的实现方式: 监听键盘事件 通过@keydown或@keyup指令监听键盘事件,适用于需…

vue 实现拖动

vue 实现拖动

Vue 实现拖动的几种方法 在Vue中实现拖动功能可以通过多种方式,包括原生HTML5的拖放API、第三方库如vuedraggable等。以下是几种常见的实现方法: 使用HTML5拖放API HTM…

vue tab实现

vue tab实现

Vue Tab 实现方法 使用动态组件实现 Tab 在 Vue 中可以通过动态组件 <component :is="currentTab"> 结合 v-for 和 v-bind 实现 Ta…

vue实现flvvideo

vue实现flvvideo

vue-flv-player 实现 FLV 视频播放 安装依赖包 npm install flv.js vue-flv-player 基础组件引入 <template> <v…