Skip to content

@utilslib/web/isTextOverflowingWidth


检测单行文字是否超出容器宽度


isTextOverflowingWidth

函数签名

typescript
function isTextOverflowingWidth(element: HTMLElement): boolean

描述

检测单行文字是否超出容器宽度

参数

参数名类型可选默认值描述
elementHTMLElement--

返回值

boolean

点击查看源码
js
/**
 * 检测单行文字是否超出容器宽度
 * @param element - 要检测的元素
 * @returns 文字是否超出容器宽度
 */
export function isTextOverflowingWidth(element) {
  if (!element) return false;
  // 创建临时span来测量文字实际宽度
  const span = document.createElement("span");
  span.style.position = "absolute";
  span.style.visibility = "hidden";
  span.style.whiteSpace = "nowrap";
  span.textContent = element.textContent || element.innerText;
  // 继承原元素的字体相关样式
  const style = getComputedStyle(element);
  span.style.fontSize = style.fontSize;
  span.style.fontFamily = style.fontFamily;
  span.style.fontWeight = style.fontWeight;
  span.style.letterSpacing = style.letterSpacing;
  span.style.textTransform = style.textTransform;
  document.body.appendChild(span);
  const textWidth = span.offsetWidth;
  span.remove();
  // 获取容器的可用宽度(减去padding)
  const paddingLeft = parseFloat(style.paddingLeft);
  const paddingRight = parseFloat(style.paddingRight);
  const availableWidth = element.clientWidth - paddingLeft - paddingRight;
  return textWidth > availableWidth;
}
ts
/**
 * 检测单行文字是否超出容器宽度
 * @param element - 要检测的元素
 * @returns 文字是否超出容器宽度
 */
export function isTextOverflowingWidth(element: HTMLElement): boolean {
  if (!element) return false;

  // 创建临时span来测量文字实际宽度
  const span = document.createElement("span");
  span.style.position = "absolute";
  span.style.visibility = "hidden";
  span.style.whiteSpace = "nowrap";
  span.textContent = element.textContent || element.innerText;

  // 继承原元素的字体相关样式
  const style = getComputedStyle(element);
  span.style.fontSize = style.fontSize;
  span.style.fontFamily = style.fontFamily;
  span.style.fontWeight = style.fontWeight;
  span.style.letterSpacing = style.letterSpacing;
  span.style.textTransform = style.textTransform;

  document.body.appendChild(span);
  const textWidth = span.offsetWidth;
  span.remove();

  // 获取容器的可用宽度(减去padding)
  const paddingLeft = parseFloat(style.paddingLeft);
  const paddingRight = parseFloat(style.paddingRight);
  const availableWidth = element.clientWidth - paddingLeft - paddingRight;

  return textWidth > availableWidth;
}

如有错误,请提交issue :::