JavaScript文本溢出

在 JavaScript 中,处理文本溢出(Text Overflow)通常涉及检测文本内容是否超出容器的宽度或高度,并根据需要进行截断、省略或动态调整。

1. ​CSS 实现文本溢出省略

如果只需要简单的文本溢出处理,可以使用 CSS 的 text-overflow 属性,结合 white-spaceoverflow 属性来实现。

单行文本溢出省略

css 复制代码
.ellipsis {
  white-space: nowrap;      /* 禁止换行 */
  overflow: hidden;         /* 隐藏溢出内容 */
  text-overflow: ellipsis;  /* 显示省略号 */
  width: 200px;             /* 容器宽度 */
}

多行文本溢出省略

css 复制代码
.multiline-ellipsis {
  display: -webkit-box;
  -webkit-line-clamp: 3;    /* 显示的行数 */
  -webkit-box-orient: vertical;
  overflow: hidden;
  text-overflow: ellipsis;
  width: 200px;
}

2. ​JavaScript 动态截断文本

如果需要在运行时动态截断文本并添加省略号,可以使用 JavaScript。

截断单行文本

ini 复制代码
javascript
function truncateText(element, maxWidth) {
  let text = element.textContent;
  while (element.scrollWidth > maxWidth && text.length > 0) {
    text = text.slice(0, -1); // 每次减少一个字符
    element.textContent = text + '...';
  }
}

const element = document.querySelector('.text');
truncateText(element, 200); // 200px 为容器宽度

截断多行文本

ini 复制代码
javascript
function truncateMultilineText(element, maxLines) {
  const lineHeight = parseInt(window.getComputedStyle(element).lineHeight);
  const maxHeight = lineHeight * maxLines;

  let text = element.textContent;
  while (element.scrollHeight > maxHeight && text.length > 0) {
    text = text.slice(0, -1); // 每次减少一个字符
    element.textContent = text + '...';
  }
}

const element = document.querySelector('.text');
truncateMultilineText(element, 3); // 最多显示 3 行

3. ​结合 CSS 和 JavaScript

可以将 CSS 和 JavaScript 结合使用,实现更灵活的效果。

示例:动态添加省略号

ini 复制代码
html
<div class="text" style="width: 200px; white-space: nowrap; overflow: hidden;">
  这是一个很长的文本内容
</div>
<script>
  const element = document.querySelector('.text');
  if (element.scrollWidth > element.clientWidth) {
    element.title = element.textContent; // 显示完整文本的提示
    element.textContent = element.textContent.slice(0, 10) + '...'; // 截断文本
  }
</script>
相关推荐
前端若水4 分钟前
会话管理:创建、切换、删除对话历史
前端·人工智能·python·react.js
Bigger14 分钟前
mini-cc:一个轻量级 AI 编程助手的诞生
前端·ai编程·claude
涵涵(互关)28 分钟前
Naive-ui树型选择器只显示根节点
前端·ui·vue
BY组态36 分钟前
Ricon组态系统最佳实践:从零开始构建物联网监控平台
前端·物联网·iot·web组态·组态
BY组态41 分钟前
Ricon组态系统vs传统组态软件:为什么选择新一代Web组态平台
前端·物联网·iot·web组态·组态
SoaringHeart43 分钟前
Flutter进阶:OverlayEntry 插入图层管理器 NOverlayZIndexManager
前端·flutter
放下华子我只抽RuiKe51 小时前
React 从入门到生产(四):自定义 Hook
前端·javascript·人工智能·深度学习·react.js·自然语言处理·前端框架
XinZong2 小时前
OpenClaw 实现双重心跳(Heartbeat)+ clawreach虾聊项目实现
javascript
IT_陈寒2 小时前
Redis缓存击穿把我整不会了,原来还有这手操作
前端·人工智能·后端
idcu3 小时前
深入 Lyt.js 组件系统:L2 渲染引擎层的核心
前端·typescript