当前位置:首页 > 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 模板基于 HTML 语法,通过 Vue 的指令和插值实现动态渲染。以下是一个基础模板示例: <template> <div id="…

vue实现拍照

vue实现拍照

Vue实现拍照功能 在Vue中实现拍照功能通常需要结合浏览器的MediaDevices API和Canvas元素。以下是具体实现方法: 安装依赖(可选) 如果需要更简单的封装,可以安装vue-web…

vue课程实现

vue课程实现

Vue 课程实现方案 课程内容设计 Vue课程应从基础到高级逐步展开,涵盖Vue核心概念、组件化开发、状态管理、路由、构建工具等。基础部分包括Vue实例、模板语法、计算属性和侦听器。中级部分深入组件通…

vue 分页 实现

vue 分页 实现

Vue 分页实现方法 使用第三方库(如 Element UI) Element UI 提供了现成的分页组件 el-pagination,适合快速集成。 安装 Element UI: npm ins…

vue 实现hover

vue 实现hover

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

vue怎么实现onclick

vue怎么实现onclick

在Vue中实现点击事件(类似原生onclick)可以通过多种方式完成,以下是常见方法: 使用 v-on 指令 Vue提供了v-on指令绑定DOM事件,简写为@。例如绑定点击事件: <butt…