当前位置:首页 > VUE

vue实现文本折叠

2026-03-29 16:41:36VUE

实现文本折叠的基本思路

文本折叠功能通常用于长文本内容的展示与隐藏切换,核心逻辑是通过控制CSS样式或DOM元素的显示/隐藏状态实现。Vue中可通过数据绑定和条件渲染实现这一效果。

使用v-if或v-show控制显示

通过响应式数据控制文本容器的显示状态:

vue实现文本折叠

<template>
  <div>
    <p v-if="!isCollapsed">{{ longText }}</p>
    <button @click="toggleCollapse">
      {{ isCollapsed ? '展开' : '折叠' }}
    </button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isCollapsed: false,
      longText: '这里是需要折叠的长文本内容...'
    }
  },
  methods: {
    toggleCollapse() {
      this.isCollapsed = !this.isCollapsed
    }
  }
}
</script>

添加过渡动画效果

通过Vue的transition组件实现平滑的展开/折叠动画:

<template>
  <div>
    <transition name="fade">
      <p v-show="!isCollapsed" class="content">{{ longText }}</p>
    </transition>
    <button @click="toggleCollapse">
      {{ isCollapsed ? '展开' : '折叠' }}
    </button>
  </div>
</template>

<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity 0.5s, max-height 0.5s;
  max-height: 1000px;
  overflow: hidden;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
  max-height: 0;
}
</style>

实现多行文本省略

结合CSS实现"显示更多"效果:

vue实现文本折叠

<template>
  <div>
    <p :class="{ 'collapsed-text': isCollapsed }">{{ longText }}</p>
    <button @click="toggleCollapse">
      {{ isCollapsed ? '显示全部' : '收起' }}
    </button>
  </div>
</template>

<style>
.collapsed-text {
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
  text-overflow: ellipsis;
}
</style>

动态计算文本高度

对于需要精确控制显示行数的场景,可使用计算属性动态判断:

<template>
  <div ref="container">
    <p :style="{ height: contentHeight }">{{ longText }}</p>
    <button @click="toggleCollapse">
      {{ isCollapsed ? '展开' : '折叠' }}
    </button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isCollapsed: true,
      fullHeight: 'auto'
    }
  },
  computed: {
    contentHeight() {
      return this.isCollapsed ? '60px' : this.fullHeight
    }
  },
  mounted() {
    this.$nextTick(() => {
      this.fullHeight = `${this.$refs.container.scrollHeight}px`
    })
  }
}
</script>

使用第三方组件

对于更复杂的需求,可考虑使用现成组件库:

  • Element UI的el-collapse
  • Vuetify的v-expansion-panels
  • Bootstrap Vue的b-collapse

这些组件通常提供更丰富的功能和更好的可访问性支持。

标签: 文本vue
分享给朋友:

相关文章

vue实现导航栏切图

vue实现导航栏切图

Vue 实现导航栏切图 使用 Vue Router 实现基础导航 在 Vue 项目中,可以通过 Vue Router 实现导航栏的路由切换。创建一个导航栏组件,并在其中使用 <router-li…

vue实现滑块

vue实现滑块

Vue 实现滑块组件的方法 使用原生 HTML 和 Vue 指令 通过 Vue 的 v-model 和事件监听实现基础滑块功能。创建一个包含 input 元素的组件,类型设置为 range,并绑定到…

vue实现签章

vue实现签章

Vue 实现签章功能 签章功能通常包括手写签名、电子印章等。以下是基于 Vue 的实现方法: 使用 canvas 实现手写签名 安装依赖(如需要): npm install signatu…

vue实现treeselect

vue实现treeselect

Vue TreeSelect 实现方法 使用 Vue 实现 TreeSelect 组件可以通过以下几种方式完成,包括使用现成的第三方库或自行封装组件。 使用第三方库 推荐使用成熟的第三方 TreeS…

vue怎么实现onclick

vue怎么实现onclick

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

vue 分页的实现

vue 分页的实现

Vue 分页的实现方法 使用 Element UI 的分页组件 安装 Element UI: npm install element-ui 在 Vue 项目中引入 Element UI 的分页组件:…