当前位置:首页 > 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 提供了多种方式实现条件判断,可以根据不同场景选择合适的方式。 v-if / v-else-if / v-else 这是 Vue 中最常用的条件渲染指令,根据表达式的…

vue实现文字播放栏

vue实现文字播放栏

Vue 实现文字播放栏(跑马灯效果) 方法一:使用 CSS 动画 + Vue 数据绑定 通过 CSS 的 @keyframes 实现动画效果,结合 Vue 的动态数据绑定控制内容。 <tem…

vue实现单点

vue实现单点

Vue 实现单点登录(SSO)方案 单点登录(SSO)允许用户在多个相关但独立的系统中使用同一组凭证登录。以下是基于 Vue 的实现方案: 基于 OAuth2/OpenID Connect 的实现…

vue实现轮询

vue实现轮询

实现轮询的基本方法 在Vue中实现轮询可以通过setInterval或setTimeout配合递归调用完成。轮询通常用于定期向服务器请求数据更新。 使用setInterval的简单示例: data…

vue实现app

vue实现app

Vue 实现 App 的常见方法 使用 Vue 开发移动端 App 主要有两种主流方案:混合开发(Hybrid)和原生渲染。以下是具体实现方式和工具链: 混合开发方案(WebView 嵌入) 通过…

vue实现bootstrap

vue实现bootstrap

Vue 中集成 Bootstrap 的方法 在 Vue 项目中集成 Bootstrap 可以通过以下方式实现,涵盖样式、组件和交互功能。 安装 Bootstrap 依赖 通过 npm 或 yarn…