巧用隐藏层计算字符宽度

在Canvas与SVG的使用中,我们经常需要根据字符串的长度来计算文字绘制的起点与终点,常规的方法莫过于使用经验值,如中文字符长度乘以6(经验值),英文字符长度乘以3,代码示例如下:

//  判断是否是ASCII字符
var pattern = /[\u0000-\u00FF]*/,
    //  根据字符的个数来计算字符串的长度
    width = pattern.test(text) ? text.length * 3 : text.length * 6

上述的方法采用了正则表达式,但是对于中英混合的字符就会过于复杂,例如“2017年7月15日”,就需要分别找出中文字符个数,英文字符个数,不仅设计繁琐,而且宽度也不精确,所以需要一种更灵巧的办法。

充分利用浏览器的布局特性可轻松解决上述问题:
1. 创建隐藏层(也可重复使用);
2. 创建字符串容器,如SPAN元素;
3. 添加字符串;
4. 计算字符串容器宽度;

具体实现代码如下:

/**
 1. @param str 要计算的字符串
 2. @param fontSize 字符串的字体大小
 3. 根据需要,还可以添加字体控制,如微软雅黑与Times New Roma的字符宽度肯定不一致
 */
 function textWidth(str, fontSize) {
    if(!textWidth.txt) {
        var txt = document.createElement('span');
        txt.style.position = 'absolute';
        //  避免遮挡其他元素
        txt.style.zIndex = -10;
        //  千万不可设置为display:none;
        txt.style.visibility = 'hidden'
        //  一定要加载到DOM中才能计算出字符宽度
        document.body.appendChild(txt);
        textWidth.txt = txt;
    }
    //  控制字符的字体大小
    textWidth.txt.style.fontSize = fontSize + 'px';
    //  设置字符内容
    textWidth.txt.textContent = str;
    //  返回计算结果
    return textWidth.txt.offsetWidth;
}

现在可轻松计算字符宽度了,如下:

//  输出99
alert(textWidth('国际米兰', 14))
//  输出85
alert(textWidth('国际米兰', 12))

最后,实际效果绘制的效果图如下所示:
网络拓扑图

结论

结合使用DOM技术,可轻松解决许多SVG、canvas绘图技术无法解决的难题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个使用 JavaScript 生成计算字符长度和行高的函数方法的示例代码: ```javascript function calculateTextSize(text, fontSize, containerWidth) { var element = document.createElement('div'); element.style.fontSize = fontSize; element.style.width = containerWidth; element.style.position = 'absolute'; element.style.visibility = 'hidden'; element.innerText = text; document.body.appendChild(element); var textSize = { width: element.offsetWidth, height: element.offsetHeight }; document.body.removeChild(element); return textSize; } // 示例用法 var text = "Hello World!"; var fontSize = "16px"; var containerWidth = "200px"; var textSize = calculateTextSize(text, fontSize, containerWidth); console.log(textSize.width); // 输出字符宽度 console.log(textSize.height); // 输出字符高度 ``` 在上述代码中,`calculateTextSize()` 函数接受三个参数:`text` 表示要计算字符内容,`fontSize` 表示字体大小,`containerWidth` 表示容器的宽度。该函数会动态创建一个隐藏的 `<div>` 元素,并将字符内容、字体大小和容器宽度设置为对应的样式。然后获取该元素的宽度和高度,即字符的实际尺寸。最后,移除该临时元素并返回计算得到的字符尺寸对象。 你可以根据实际需要调整函数中的样式和参数。使用示例代码时,将要计算字符内容、字体大小和容器宽度传递给 `calculateTextSize()` 函数,并获取返回的字符尺寸对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值