35 lines
1.0 KiB
JavaScript
35 lines
1.0 KiB
JavaScript
// sheep/utils/textUtils.js
|
||
export function measureTextWidth(text, fontSize = 14, fontFamily = 'sans-serif') {
|
||
// 钉钉小程序没有 uni.createCanvasContext 方法
|
||
if (typeof uni === 'undefined' || typeof uni.createCanvasContext !== 'function') {
|
||
return estimateTextWidth(text, fontSize);
|
||
}
|
||
|
||
try {
|
||
const ctx = uni.createCanvasContext('tempCanvasForText');
|
||
ctx.setFontSize(fontSize);
|
||
ctx.font = `${fontSize}px ${fontFamily}`;
|
||
const metrics = ctx.measureText(text);
|
||
return metrics.width;
|
||
} catch (e) {
|
||
// 某些平台可能不支持 measureText,降级使用估算
|
||
return estimateTextWidth(text, fontSize);
|
||
}
|
||
}
|
||
|
||
// 简单估算中文和英文字符宽度
|
||
function estimateTextWidth(text, fontSize = 14) {
|
||
let width = 0;
|
||
for (let i = 0; i < text.length; i++) {
|
||
const charCode = text.charCodeAt(i);
|
||
if (charCode >= 0x4e00 && charCode <= 0x9fff) {
|
||
// 中文字符
|
||
width += fontSize;
|
||
} else {
|
||
// 英文字符
|
||
width += fontSize * 0.5;
|
||
}
|
||
}
|
||
return width;
|
||
}
|