【JS】计算任意字符串的像素宽度(px)

文章目录

代码实现

函数封装:

ts 复制代码
export function getStringWidthDOM(
  str: string,
  {
    fontSize = '16px',
    fontFamily = 'Segoe UI Emoji, Segoe UI Symbol',
    fontWeight = 'normal',
    fontStyle = 'normal',
  }: { fontSize?: string; fontFamily?: string; fontWeight?: string | number; fontStyle?: string },
): number {
  const span = document.createElement('span');
  span.style.cssText = `
      position: absolute;
      visibility: hidden;
      white-space: nowrap;
      font-size: ${fontSize};
      font-family: ${fontFamily};
      font-weight: ${fontWeight};
      font-style: ${fontStyle};
    `;
  span.textContent = str;
  document.body.appendChild(span);
  const width = span.offsetWidth;
  document.body.removeChild(span);
  return width;
}

使用案例:

ts 复制代码
const width: number = getStringWidthDOM('Hello, TS!', {
  fontSize: '14px',
  fontWeight: 'bold'
});
相关推荐
yanyu-yaya1 小时前
速学兼复习之vue3章节3
前端·javascript·vue.js·学习·前端框架
林恒smileZAZ1 小时前
前端拖拽,看似简单,其实处处是坑
前端·javascript·vue.js
跟着珅聪学java1 小时前
JavaScript中编写new Vue()实例的完整教程(Vue 2.x)
前端·javascript·vue.js
Marshmallowc1 小时前
React 合成事件失效?深度解析 stopPropagation 阻止冒泡无效的原因与 React 17+ 事件委派机制
前端·javascript·react.js·面试·合成事件
2501_948120153 小时前
基于Vue 3的可视化大屏系统设计
前端·javascript·vue.js
Jinuss3 小时前
源码分析之React中createFiberRoot方法创建Fiber根节点
前端·javascript·react.js
Jinuss4 小时前
源码分析之React中ReactDOMRoot实现
前端·javascript·react.js
摘星编程4 小时前
React Native鸿蒙版:React Query无限滚动
javascript·react native·react.js
月空MoonSky5 小时前
解决使用Notepad++出现异型字或者繁体字体问题
java·javascript·notepad++