Skip to content

v-rich-overflow 指令

v-rich-overflow 是一个用于处理富文本溢出的 Vue 指令。支持按字符数或行数截断文本,并提供展开/收起功能。该指令会保留 HTML 标签结构,但会移除媒体标签(img、video、audio)以避免布局问题。

基础用法

loading

配置选项

参数说明类型默认值必填
num截断长度(按字符数)或行数number120
ellipsis省略号文本string'...'
moreText展开按钮文本string'展开'
lessText收起按钮文本string'收起'
buttonClass按钮自定义类名string''
buttonStyle按钮自定义样式Partial<CSSStyleDeclaration>{}
collapseMode截断模式'chars' | 'lines''chars'

使用示例

按行数截断

vue
<template>
  <div
    v-rich-overflow="{
      num: 3,
      collapseMode: 'lines',
    }"
  >
    <!-- 富文本内容 -->
  </div>
</template>

按字符数截断

vue
<template>
  <div
    v-rich-overflow="{
      num: 100,
      collapseMode: 'chars',
    }"
  >
    <!-- 富文本内容 -->
  </div>
</template>

自定义按钮样式

vue
<template>
  <div
    v-rich-overflow="{
      num: 100,
      buttonClass: 'custom-btn',
      buttonStyle: {
        color: '#1890ff',
        fontWeight: 'bold',
      },
    }"
  >
    <!-- 富文本内容 -->
  </div>
</template>

功能特性

  • 智能截断

    • chars 模式:按字符数智能截断,会自动调整长度以避免破坏单词
    • lines 模式:使用 CSS 的 -webkit-line-clamp 实现多行截断
  • 样式继承

    • 展开/收起按钮会继承文本的字体大小和行高
    • lines 模式下会添加渐变背景效果
  • 响应式

    • 自动监听窗口大小变化
    • 使用防抖优化性能
  • 清理机制

    • 自动移除媒体标签以避免布局问题
    • 组件卸载时自动清理事件监听和状态

注意事项

  1. lines 模式依赖 -webkit-line-clamp 属性,在某些旧版浏览器可能不支持
  2. 媒体标签(img、video、audio)会在折叠状态下被移除,展开后才会显示
  3. 指令会自动处理按钮样式,确保与文本对齐
  4. 在动态内容场景下,建议使用 v-safe-html 指令配合使用

浏览器兼容性

  • 现代浏览器:完全支持
  • IE:不支持 lines 模式
  • 移动端:完全支持

Released under the MIT License.