JavaScript文本溢出

179 阅读1分钟

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

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

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

单行文本溢出省略

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

多行文本溢出省略

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

2. ​JavaScript 动态截断文本

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

截断单行文本

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 为容器宽度

截断多行文本

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 结合使用,实现更灵活的效果。

示例:动态添加省略号

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>