当前位置:首页 > VUE

Vue查看全文实现

2026-01-08 06:48:07VUE

Vue 查看全文实现方法

使用 v-showv-if 控制显示

通过 v-showv-if 指令控制文本的显示与隐藏。v-show 通过 CSS 的 display 属性切换,适合频繁切换的场景;v-if 会销毁和重建 DOM,适合不频繁切换的场景。

<template>
  <div>
    <p>{{ isExpanded ? fullText : truncatedText }}</p>
    <button @click="isExpanded = !isExpanded">
      {{ isExpanded ? '收起' : '展开全文' }}
    </button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      fullText: '这里是完整的文本内容,可能很长很长...',
      truncatedText: '这里是截断的文本内容...',
      isExpanded: false
    }
  }
}
</script>

使用计算属性动态截断文本

通过计算属性动态生成截断后的文本,避免硬编码截断内容。

<template>
  <div>
    <p>{{ displayText }}</p>
    <button @click="isExpanded = !isExpanded">
      {{ isExpanded ? '收起' : '展开全文' }}
    </button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      fullText: '这里是完整的文本内容,可能很长很长...',
      maxLength: 20,
      isExpanded: false
    }
  },
  computed: {
    displayText() {
      return this.isExpanded 
        ? this.fullText 
        : this.fullText.slice(0, this.maxLength) + '...'
    }
  }
}
</script>

使用 CSS 控制文本行数

通过 CSS 的 -webkit-line-clamp 属性限制文本显示的行数,点击按钮后取消限制。

<template>
  <div>
    <p :class="{ 'truncate-text': !isExpanded }">{{ fullText }}</p>
    <button @click="isExpanded = !isExpanded">
      {{ isExpanded ? '收起' : '展开全文' }}
    </button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      fullText: '这里是完整的文本内容,可能很长很长...',
      isExpanded: false
    }
  }
}
</script>

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

使用第三方库(如 vue-text-clamp

对于更复杂的需求,可以使用第三方库如 vue-text-clamp,它提供了更灵活的文本截断和展开功能。

安装库:

npm install vue-text-clamp

使用示例:

<template>
  <div>
    <text-clamp 
      :text="fullText" 
      :max-lines="2" 
      :expanded="isExpanded"
      @clamp-change="handleClampChange"
    >
      <template #after="{ expand, collapse }">
        <button v-if="showMore" @click="expand">展开全文</button>
        <button v-else @click="collapse">收起</button>
      </template>
    </text-clamp>
  </div>
</template>

<script>
import TextClamp from 'vue-text-clamp'

export default {
  components: { TextClamp },
  data() {
    return {
      fullText: '这里是完整的文本内容,可能很长很长...',
      isExpanded: false,
      showMore: false
    }
  },
  methods: {
    handleClampChange({ clamped }) {
      this.showMore = clamped
    }
  }
}
</script>

结合动画效果

为文本展开和收起添加动画效果,提升用户体验。

<template>
  <div>
    <transition name="slide-fade">
      <p :key="isExpanded">{{ displayText }}</p>
    </transition>
    <button @click="isExpanded = !isExpanded">
      {{ isExpanded ? '收起' : '展开全文' }}
    </button>
  </div>
</template>

<style>
.slide-fade-enter-active, .slide-fade-leave-active {
  transition: all 0.3s ease;
}
.slide-fade-enter, .slide-fade-leave-to {
  opacity: 0;
  transform: translateY(-10px);
}
</style>

Vue查看全文实现

标签: 全文Vue
分享给朋友:

相关文章

用Vue实现

用Vue实现

以下是使用 Vue 实现常见功能的几种方法: 数据绑定与响应式更新 使用 v-model 实现双向数据绑定: <template> <input v-model="messa…

Vue函数实现

Vue函数实现

Vue 函数式组件的实现 Vue 函数式组件是一种无状态、无实例的组件形式,适用于简单渲染逻辑的场景。其核心特点是性能高效,适合纯展示型需求。 定义方式 export default { fu…

利用Vue实现

利用Vue实现

使用Vue实现的基本步骤 安装Vue.js 通过npm或CDN引入Vue.js。npm安装命令:npm install vue。CDN引入方式:<script src="https://cdn.…

Vue实现手机推送

Vue实现手机推送

Vue实现手机推送的方法 使用Firebase Cloud Messaging (FCM) Firebase Cloud Messaging是一种跨平台的消息推送解决方案,适用于Vue项目。需要在项目…

Vue实现几行滚动

Vue实现几行滚动

Vue实现多行滚动效果 使用CSS实现多行滚动 通过CSS的overflow和white-space属性可以实现简单的多行文本滚动效果。 <template> <div cl…

Vue实现多站点

Vue实现多站点

Vue实现多站点的方案 Vue.js可以通过多种方式实现多站点架构,具体方案取决于项目需求和规模。以下是常见的几种实现方法: 基于动态路由的SPA方案 适用于中小型多站点项目,所有站点共享同一个…